diff --git a/mach/powerpc/libem/cms.s b/mach/powerpc/libem/cms.s index 5bcd3106d..0bcb1ab0b 100644 --- a/mach/powerpc/libem/cms.s +++ b/mach/powerpc/libem/cms.s @@ -1,18 +1,17 @@ .sect .text ! Compare sets a, b. -! Stack: ( b a -- ) -! With r3 = size of each set -! Yields r3 = 0 if equal, nonzero if not equal +! Stack: ( b a size -- result ) +! Result is 0 if equal, nonzero if not equal. .define .cms .cms: + lwz r3, 0(sp) ! r3 = size of each set srwi r7, r3, 2 mtspr ctr, r7 ! ctr = size / 4 - mr r4, sp ! r4 = ptr to set a - add r5, sp, r3 ! r5 = ptr to set b + addi r4, sp, 4 ! r4 = ptr to set a + add r5, r4, r3 ! r5 = ptr to set b li r6, 0 ! r6 = index - add r9, r5, r3 ! r9 = future sp 1: lwzx r7, r4, r6 lwzx r8, r5, r6 @@ -20,10 +19,12 @@ addi r6, r6, 4 bne cr0, 2f ! branch if not equal bdnz 1b ! loop ctr times - li r3, 0 ! equal: return 0 + li r9, 0 ! equal: return 0 b 3f 2: - li r3, 1 ! not equal: return 1 + li r9, 1 ! not equal: return 1 3: - mr sp, r9 ! remove sets from stack + slwi r7, r3, 1 + add sp, sp, r7 ! adjust stack pointer + stw r9, 0(sp) ! push result blr diff --git a/mach/powerpc/ncg/table b/mach/powerpc/ncg/table index 7868f2a3f..84750df05 100644 --- a/mach/powerpc/ncg/table +++ b/mach/powerpc/ncg/table @@ -1854,12 +1854,13 @@ PATTERNS cmi INT32 pat cms defined($1) - with STACK - kills ALL - gen - move {CONST, $1}, R3 - bl {LABEL, ".cms"} - yields R3 + leaving + loc $1 + cal ".cms" + + pat cms !defined($1) + leaving + cal ".cms" /* Other branching and labelling */