Skip to content

Commit

Permalink
Add a test (currently failing) to check that Pascal char sets can sto…
Browse files Browse the repository at this point in the history
…re all 256

possible values. Add the PowerPC ncg and mcg backend support to let the test
actually run, including modifying a bunch of PowrePC libem functions so that
they can be called from both ncg and mcg.
  • Loading branch information
davidgiven committed Jan 15, 2017
1 parent 1ea46f6 commit e7e29d3
Show file tree
Hide file tree
Showing 10 changed files with 221 additions and 133 deletions.
6 changes: 4 additions & 2 deletions mach/powerpc/libem/ior.s
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
.sect .text

! Set union.
! Stack: ( b a -- a+b )
! With r3 = size of set
! Stack: ( size b a -- a+b )

.define .ior
.ior:
lwz r3, 0 (sp)
addi sp, sp, 4

mr r4, sp ! r4 = ptr to set a
add r5, sp, r3 ! r5 = ptr to set b
rlwinm r6, r3, 30, 2, 31
Expand Down
22 changes: 22 additions & 0 deletions mach/powerpc/libem/rck.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include "powerpc.h"

.sect .text

! Bounds check. Traps if the value is out of range.
! Stack: ( descriptor value -- )

.define .rck
.rck:
lwz r3, 0 (sp)
lwz r4, 4 (sp)
addi sp, sp, 8

lwz r5, 0 (r3)
cmp cr0, 0, r4, r5
bc IFTRUE, LT, .trap_erange

lwz r5, 4 (r3)
cmp cr0, 0, r4, r5
bc IFTRUE, GT, .trap_erange

bclr ALWAYS, 0, 0
7 changes: 5 additions & 2 deletions mach/powerpc/libem/set.s
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
.sect .text

! Create singleton set.
! Stack: ( -- set )
! With r3 = size of set, r4 = bit number
! Stack: ( size bitnumber -- set )

.define .set
.set:
lwz r3, 0 (sp)
lwz r4, 4 (sp)
addi sp, sp, 8

rlwinm r7, r3, 30, 2, 31
neg r5, r3
add sp, sp, r5 ! allocate set
Expand Down
6 changes: 4 additions & 2 deletions mach/powerpc/libem/zer.s
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
.sect .text

! Create empty set.
! Stack: ( -- set )
! With r3 = size of set
! Stack: ( size -- set )

.define .zer
.zer:
lwz r3, 0(sp)
addi sp, sp, 4

rlwinm r7, r3, 30, 2, 31
addi r4, r0, 0 ! r4 = zero
neg r5, r3
Expand Down
58 changes: 27 additions & 31 deletions mach/powerpc/ncg/table
Original file line number Diff line number Diff line change
Expand Up @@ -1503,18 +1503,14 @@ PATTERNS
yields {OR_RC, %2, lo(%1.val)}

pat ior defined($1) /* OR set */
with STACK
kills ALL
gen
move {CONST, $1}, R3
bl {LABEL, ".ior"}
leaving
loc $1
cal ".ior"

/* OR set (variable), used in lang/m2/libm2/LtoUset.e */
pat ior !defined($1)
with GPR3 STACK
kills ALL
gen
bl {LABEL, ".ior"}
leaving
cal ".ior"

pat xor $1==4 /* XOR word */
with REG REG
Expand Down Expand Up @@ -1572,12 +1568,10 @@ PATTERNS
leaving
loc 0

pat zer defined($1) /* Create empty set */
with STACK
kills ALL
gen
move {CONST, $1}, R3
bl {LABEL, ".zer"}
pat zer defined($1) /* Create empty set */
leaving
loc $1
cal ".zer"

pat sli $1==4 /* Shift left (second << top) */
with CONST_ALL GPR
Expand Down Expand Up @@ -1655,27 +1649,19 @@ PATTERNS
/* Sets */

pat set defined($1) /* Create singleton set */
with GPR4 STACK
kills ALL
gen
move {CONST, $1}, R3
bl {LABEL, ".set"}
leaving
loc $1
cal ".set"

/* Create set (variable), used in lang/m2/libm2/LtoUset.e */
pat set !defined($1)
with GPR3 GPR4 STACK
kills ALL
gen
bl {LABEL, ".set"}
leaving
cal ".set"

pat inn defined($1) /* Test for set bit */
with STACK
kills ALL
uses REG
gen
li32 %a, {CONST, $1}
stwu %a, {GPRINDIRECT, SP, 0-4}
bl {LABEL, ".inn"}
leaving
loc $1
cal ".inn"


/* Boolean resolutions */
Expand Down Expand Up @@ -2066,6 +2052,16 @@ PATTERNS
loc $1
ass 4

pat lae rck $2==4 /* Range check */
with GPR
uses CR0
gen
cmpli %a, {CONST, 0}, %1, {CONST, rom($1, 1)}
bc IFTRUE, LT, {LABEL, ".trap_erange"}
cmpli %a, {CONST, 0}, %1, {CONST, rom($1, 2)}
bc IFTRUE, GT, {LABEL, ".trap_erange"}




/* Floating point support */
Expand Down
Loading

0 comments on commit e7e29d3

Please sign in to comment.