mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 09:23:44 +00:00
Added automatic support for register optimization.
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
#!/bin/sh
|
||||
sed '1,/^register usage counts/d' | sort +1n -r | Arrangeregs
|
||||
sed '1,/^register usage counts/d' | sort +1nr +0.1n | Arrangeregs
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# -g -O2 -DSPEED
|
||||
|
||||
# Use these options for optimizing compiles with gcc
|
||||
# -O2 -fomit-frame-pointer -DSPEED
|
||||
-O2 -fomit-frame-pointer -DSPEED
|
||||
|
||||
# Use this with gcc if you want to look at the .s files
|
||||
# -fverbose-asm
|
||||
@@ -37,4 +37,4 @@
|
||||
# uses which occur inside debugging routines, so to get an accurate
|
||||
# count you need to disable all the debugging routines by compiling
|
||||
# with -DSPEED and not using any -d* flags.
|
||||
-DMEASURE_REGISTER_USAGE -DSPEED
|
||||
# -DMEASURE_REGISTER_USAGE -DSPEED
|
||||
|
||||
@@ -188,7 +188,7 @@ extern Word *nondstackmin;
|
||||
use gcc's expression statements here */
|
||||
|
||||
#define create1(w1) ( \
|
||||
hp += 1, \
|
||||
hp = hp + 1, \
|
||||
hp[-1] = (Word) (w1), \
|
||||
debugcr1(hp[-1], hp), \
|
||||
heap_overflow_check(), \
|
||||
@@ -196,7 +196,7 @@ extern Word *nondstackmin;
|
||||
)
|
||||
|
||||
#define create2(w1, w2) ( \
|
||||
hp += 2, \
|
||||
hp = hp + 2, \
|
||||
hp[-2] = (Word) (w1), \
|
||||
hp[-1] = (Word) (w2), \
|
||||
debugcr2(hp[-2], hp[-1], hp), \
|
||||
@@ -209,13 +209,13 @@ extern Word *nondstackmin;
|
||||
#define detstackvar(n) sp[-n]
|
||||
|
||||
#define incr_sp(n) ( \
|
||||
sp += (n), \
|
||||
sp = sp + (n), \
|
||||
detstack_overflow_check(), \
|
||||
(void)0 \
|
||||
)
|
||||
|
||||
#define decr_sp(n) ( \
|
||||
sp -= (n), \
|
||||
sp = sp - (n), \
|
||||
detstack_underflow_check(), \
|
||||
(void)0 \
|
||||
)
|
||||
@@ -224,13 +224,13 @@ extern Word *nondstackmin;
|
||||
#define push(w) ( \
|
||||
*sp = (Word) (w), \
|
||||
debugpush(*sp, sp), \
|
||||
sp += 1, \
|
||||
sp = sp + 1, \
|
||||
detstack_overflow_check(), \
|
||||
(void)0 \
|
||||
)
|
||||
|
||||
#define pop() ( \
|
||||
sp -= 1, \
|
||||
sp = sp - 1, \
|
||||
debugpop(*sp, sp), \
|
||||
detstack_underflow_check(), \
|
||||
/* return */ *sp \
|
||||
@@ -280,7 +280,7 @@ extern Word *nondstackmin;
|
||||
\
|
||||
prevfr = maxfr; \
|
||||
succfr = curfr; \
|
||||
maxfr += (CHOICE_POINT_SIZE + n); \
|
||||
maxfr = maxfr + (CHOICE_POINT_SIZE + n);\
|
||||
curfr = maxfr; \
|
||||
curfr[PREDNM] = (Word) prednm; \
|
||||
curfr[REDOIP] = (Word) redoip; \
|
||||
@@ -296,7 +296,7 @@ extern Word *nondstackmin;
|
||||
reg Word *prevfr; \
|
||||
\
|
||||
prevfr = maxfr; \
|
||||
maxfr += 4; \
|
||||
maxfr = maxfr + 4; \
|
||||
maxfr[PREDNM] = (Word) prednm; \
|
||||
maxfr[REDOIP] = (Word) doresethpfail; \
|
||||
maxfr[PREVFR] = (Word) prevfr; \
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
#define r1 count_usage(1, mr1)
|
||||
#define r2 count_usage(2, mr7)
|
||||
#define r3 count_usage(3, mr4)
|
||||
#define r4 count_usage(4, mr2)
|
||||
#define r5 count_usage(5, mr3)
|
||||
#define r6 count_usage(6, mr33)
|
||||
#define r7 count_usage(7, mr34)
|
||||
#define r8 count_usage(8, mr35)
|
||||
#define r9 count_usage(9, mr36)
|
||||
#define r10 count_usage(10, mr10)
|
||||
#define r11 count_usage(11, mr11)
|
||||
#define r12 count_usage(12, mr12)
|
||||
#define r13 count_usage(13, mr13)
|
||||
#define r14 count_usage(14, mr14)
|
||||
#define r15 count_usage(15, mr15)
|
||||
#define r16 count_usage(16, mr16)
|
||||
#define r17 count_usage(17, mr17)
|
||||
#define r18 count_usage(18, mr18)
|
||||
#define r19 count_usage(19, mr19)
|
||||
#define r20 count_usage(20, mr20)
|
||||
#define r21 count_usage(21, mr21)
|
||||
#define r22 count_usage(22, mr22)
|
||||
#define r23 count_usage(23, mr23)
|
||||
#define r24 count_usage(24, mr24)
|
||||
#define r25 count_usage(25, mr25)
|
||||
#define r26 count_usage(26, mr26)
|
||||
#define r27 count_usage(27, mr27)
|
||||
#define r28 count_usage(28, mr28)
|
||||
#define r29 count_usage(29, mr29)
|
||||
#define r30 count_usage(30, mr30)
|
||||
#define r31 count_usage(31, mr31)
|
||||
#define r32 count_usage(32, mr32)
|
||||
#define succip LVALUE_CAST(Code *, count_usage(SI_RN, mr6))
|
||||
#define hp LVALUE_CAST(Word *, count_usage(HP_RN, mr5))
|
||||
#define sp LVALUE_CAST(Word *, count_usage(SP_RN, mr0))
|
||||
#define maxfr LVALUE_CAST(Word *, count_usage(MF_RN, mr9))
|
||||
#define curfr LVALUE_CAST(Word *, count_usage(CF_RN, mr8))
|
||||
#define r1 count_usage(1, mr0)
|
||||
#define r2 count_usage(2, mr5)
|
||||
#define r3 count_usage(3, mr6)
|
||||
#define r4 count_usage(4, mr1)
|
||||
#define r5 count_usage(5, mr9)
|
||||
#define r6 count_usage(6, mr10)
|
||||
#define r7 count_usage(7, mr11)
|
||||
#define r8 count_usage(8, mr12)
|
||||
#define r9 count_usage(9, mr13)
|
||||
#define r10 count_usage(10, mr14)
|
||||
#define r11 count_usage(11, mr15)
|
||||
#define r12 count_usage(12, mr16)
|
||||
#define r13 count_usage(13, mr17)
|
||||
#define r14 count_usage(14, mr18)
|
||||
#define r15 count_usage(15, mr19)
|
||||
#define r16 count_usage(16, mr20)
|
||||
#define r17 count_usage(17, mr21)
|
||||
#define r18 count_usage(18, mr22)
|
||||
#define r19 count_usage(19, mr23)
|
||||
#define r20 count_usage(20, mr24)
|
||||
#define r21 count_usage(21, mr25)
|
||||
#define r22 count_usage(22, mr26)
|
||||
#define r23 count_usage(23, mr27)
|
||||
#define r24 count_usage(24, mr28)
|
||||
#define r25 count_usage(25, mr29)
|
||||
#define r26 count_usage(26, mr30)
|
||||
#define r27 count_usage(27, mr31)
|
||||
#define r28 count_usage(28, mr32)
|
||||
#define r29 count_usage(29, mr33)
|
||||
#define r30 count_usage(30, mr34)
|
||||
#define r31 count_usage(31, mr35)
|
||||
#define r32 count_usage(32, mr36)
|
||||
#define succip LVALUE_CAST(Code *, count_usage(SI_RN, mr4))
|
||||
#define hp LVALUE_CAST(Word *, count_usage(HP_RN, mr3))
|
||||
#define sp LVALUE_CAST(Word *, count_usage(SP_RN, mr2))
|
||||
#define maxfr LVALUE_CAST(Word *, count_usage(MF_RN, mr8))
|
||||
#define curfr LVALUE_CAST(Word *, count_usage(CF_RN, mr7))
|
||||
|
||||
Reference in New Issue
Block a user