diff --git a/basis/compiler/tests/low-level-ir.factor b/basis/compiler/tests/low-level-ir.factor index ececac3037..e3e2c3344e 100644 --- a/basis/compiler/tests/low-level-ir.factor +++ b/basis/compiler/tests/low-level-ir.factor @@ -46,6 +46,17 @@ IN: compiler.tests.low-level-ir } compile-test-bb ] unit-test +! ##copy on floats +[ 1.5 ] [ + V{ + T{ ##load-reference f 4 1.5 } + T{ ##unbox-float f 1 4 } + T{ ##copy f 2 1 double-float-rep } + T{ ##box-float f 3 2 } + T{ ##copy f 0 3 int-rep } + } compile-test-bb +] unit-test + ! make sure slot access works when the destination is ! one of the sources [ t ] [ @@ -138,4 +149,4 @@ USE: multiline } compile-test-bb ] unit-test -*/ \ No newline at end of file +*/ diff --git a/basis/cpu/ppc/assembler/assembler-tests.factor b/basis/cpu/ppc/assembler/assembler-tests.factor index 6ee1c84558..8e412c4c83 100644 --- a/basis/cpu/ppc/assembler/assembler-tests.factor +++ b/basis/cpu/ppc/assembler/assembler-tests.factor @@ -1,117 +1,120 @@ USING: cpu.ppc.assembler tools.test arrays kernel namespaces -make vocabs sequences ; +make vocabs sequences byte-arrays.hex ; FROM: cpu.ppc.assembler => B ; IN: cpu.ppc.assembler.tests : test-assembler ( expected quot -- ) [ 1array ] [ [ B{ } make ] curry ] bi* unit-test ; -B{ HEX: 38 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 ADDI ] test-assembler -B{ HEX: 3c HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 ADDIS ] test-assembler -B{ HEX: 30 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 ADDIC ] test-assembler -B{ HEX: 34 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 ADDIC. ] test-assembler -B{ HEX: 38 HEX: 40 HEX: 00 HEX: 01 } [ 1 2 LI ] test-assembler -B{ HEX: 3c HEX: 40 HEX: 00 HEX: 01 } [ 1 2 LIS ] test-assembler -B{ HEX: 38 HEX: 22 HEX: ff HEX: fd } [ 1 2 3 SUBI ] test-assembler -B{ HEX: 1c HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 MULI ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 1a HEX: 14 } [ 1 2 3 ADD ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 1a HEX: 15 } [ 1 2 3 ADD. ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 1e HEX: 14 } [ 1 2 3 ADDO ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 1e HEX: 15 } [ 1 2 3 ADDO. ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 18 HEX: 14 } [ 1 2 3 ADDC ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 18 HEX: 15 } [ 1 2 3 ADDC. ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 1e HEX: 14 } [ 1 2 3 ADDO ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 1c HEX: 15 } [ 1 2 3 ADDCO. ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 19 HEX: 14 } [ 1 2 3 ADDE ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 18 HEX: 38 } [ 1 2 3 AND ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 18 HEX: 39 } [ 1 2 3 AND. ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 1b HEX: d6 } [ 1 2 3 DIVW ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 1b HEX: 96 } [ 1 2 3 DIVWU ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1a HEX: 38 } [ 1 2 3 EQV ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1b HEX: b8 } [ 1 2 3 NAND ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 18 HEX: f8 } [ 1 2 3 NOR ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 10 HEX: f8 } [ 1 2 NOT ] test-assembler -B{ HEX: 60 HEX: 41 HEX: 00 HEX: 03 } [ 1 2 3 ORI ] test-assembler -B{ HEX: 64 HEX: 41 HEX: 00 HEX: 03 } [ 1 2 3 ORIS ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1b HEX: 78 } [ 1 2 3 OR ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 13 HEX: 78 } [ 1 2 MR ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 18 HEX: 96 } [ 1 2 3 MULHW ] test-assembler -B{ HEX: 1c HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 MULLI ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 18 HEX: 16 } [ 1 2 3 MULHWU ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 19 HEX: d6 } [ 1 2 3 MULLW ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 18 HEX: 30 } [ 1 2 3 SLW ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1e HEX: 30 } [ 1 2 3 SRAW ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1c HEX: 30 } [ 1 2 3 SRW ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1e HEX: 70 } [ 1 2 3 SRAWI ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 18 HEX: 50 } [ 1 2 3 SUBF ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 18 HEX: 10 } [ 1 2 3 SUBFC ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 19 HEX: 10 } [ 1 2 3 SUBFE ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 07 HEX: 74 } [ 1 2 EXTSB ] test-assembler -B{ HEX: 68 HEX: 41 HEX: 00 HEX: 03 } [ 1 2 3 XORI ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1a HEX: 78 } [ 1 2 3 XOR ] test-assembler -B{ HEX: 7c HEX: 22 HEX: 00 HEX: d0 } [ 1 2 NEG ] test-assembler -B{ HEX: 2c HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 CMPI ] test-assembler -B{ HEX: 28 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 CMPLI ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 18 HEX: 00 } [ 1 2 3 CMP ] test-assembler -B{ HEX: 54 HEX: 22 HEX: 19 HEX: 0a } [ 1 2 3 4 5 RLWINM ] test-assembler -B{ HEX: 54 HEX: 22 HEX: 18 HEX: 38 } [ 1 2 3 SLWI ] test-assembler -B{ HEX: 54 HEX: 22 HEX: e8 HEX: fe } [ 1 2 3 SRWI ] test-assembler -B{ HEX: 88 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LBZ ] test-assembler -B{ HEX: 8c HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LBZU ] test-assembler -B{ HEX: a8 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LHA ] test-assembler -B{ HEX: ac HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LHAU ] test-assembler -B{ HEX: a0 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LHZ ] test-assembler -B{ HEX: a4 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LHZU ] test-assembler -B{ HEX: 80 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LWZ ] test-assembler -B{ HEX: 84 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LWZU ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 18 HEX: ae } [ 1 2 3 LBZX ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 18 HEX: ee } [ 1 2 3 LBZUX ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1a HEX: ae } [ 1 2 3 LHAX ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1a HEX: ee } [ 1 2 3 LHAUX ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1a HEX: 2e } [ 1 2 3 LHZX ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 1a HEX: 6e } [ 1 2 3 LHZUX ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 18 HEX: 2e } [ 1 2 3 LWZX ] test-assembler -B{ HEX: 7c HEX: 41 HEX: 18 HEX: 6e } [ 1 2 3 LWZUX ] test-assembler -B{ HEX: 48 HEX: 00 HEX: 00 HEX: 01 } [ 1 B ] test-assembler -B{ HEX: 48 HEX: 00 HEX: 00 HEX: 01 } [ 1 BL ] test-assembler -B{ HEX: 41 HEX: 80 HEX: 00 HEX: 04 } [ 1 BLT ] test-assembler -B{ HEX: 41 HEX: 81 HEX: 00 HEX: 04 } [ 1 BGT ] test-assembler -B{ HEX: 40 HEX: 81 HEX: 00 HEX: 04 } [ 1 BLE ] test-assembler -B{ HEX: 40 HEX: 80 HEX: 00 HEX: 04 } [ 1 BGE ] test-assembler -B{ HEX: 41 HEX: 80 HEX: 00 HEX: 04 } [ 1 BLT ] test-assembler -B{ HEX: 40 HEX: 82 HEX: 00 HEX: 04 } [ 1 BNE ] test-assembler -B{ HEX: 41 HEX: 82 HEX: 00 HEX: 04 } [ 1 BEQ ] test-assembler -B{ HEX: 41 HEX: 83 HEX: 00 HEX: 04 } [ 1 BO ] test-assembler -B{ HEX: 40 HEX: 83 HEX: 00 HEX: 04 } [ 1 BNO ] test-assembler -B{ HEX: 4c HEX: 20 HEX: 00 HEX: 20 } [ 1 BCLR ] test-assembler -B{ HEX: 4e HEX: 80 HEX: 00 HEX: 20 } [ BLR ] test-assembler -B{ HEX: 4e HEX: 80 HEX: 00 HEX: 21 } [ BLRL ] test-assembler -B{ HEX: 4c HEX: 20 HEX: 04 HEX: 20 } [ 1 BCCTR ] test-assembler -B{ HEX: 4e HEX: 80 HEX: 04 HEX: 20 } [ BCTR ] test-assembler -B{ HEX: 7c HEX: 61 HEX: 02 HEX: a6 } [ 3 MFXER ] test-assembler -B{ HEX: 7c HEX: 68 HEX: 02 HEX: a6 } [ 3 MFLR ] test-assembler -B{ HEX: 7c HEX: 69 HEX: 02 HEX: a6 } [ 3 MFCTR ] test-assembler -B{ HEX: 7c HEX: 61 HEX: 03 HEX: a6 } [ 3 MTXER ] test-assembler -B{ HEX: 7c HEX: 68 HEX: 03 HEX: a6 } [ 3 MTLR ] test-assembler -B{ HEX: 7c HEX: 69 HEX: 03 HEX: a6 } [ 3 MTCTR ] test-assembler -B{ HEX: 7c HEX: 61 HEX: 02 HEX: a6 } [ 3 MFXER ] test-assembler -B{ HEX: 7c HEX: 68 HEX: 02 HEX: a6 } [ 3 MFLR ] test-assembler -B{ HEX: c0 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LFS ] test-assembler -B{ HEX: c4 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LFSU ] test-assembler -B{ HEX: c8 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LFD ] test-assembler -B{ HEX: cc HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 LFDU ] test-assembler -B{ HEX: d0 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 STFS ] test-assembler -B{ HEX: d4 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 STFSU ] test-assembler -B{ HEX: d8 HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 STFD ] test-assembler -B{ HEX: dc HEX: 22 HEX: 00 HEX: 03 } [ 1 2 3 STFDU ] test-assembler -B{ HEX: fc HEX: 20 HEX: 10 HEX: 48 } [ 1 2 FMR ] test-assembler -B{ HEX: fc HEX: 20 HEX: 10 HEX: 1e } [ 1 2 FCTIWZ ] test-assembler -B{ HEX: fc HEX: 22 HEX: 18 HEX: 2a } [ 1 2 3 FADD ] test-assembler -B{ HEX: fc HEX: 22 HEX: 18 HEX: 2b } [ 1 2 3 FADD. ] test-assembler -B{ HEX: fc HEX: 22 HEX: 18 HEX: 28 } [ 1 2 3 FSUB ] test-assembler -B{ HEX: fc HEX: 22 HEX: 00 HEX: f2 } [ 1 2 3 FMUL ] test-assembler -B{ HEX: fc HEX: 22 HEX: 18 HEX: 24 } [ 1 2 3 FDIV ] test-assembler -B{ HEX: fc HEX: 20 HEX: 10 HEX: 2c } [ 1 2 FSQRT ] test-assembler -B{ HEX: fc HEX: 41 HEX: 18 HEX: 00 } [ 1 2 3 FCMPU ] test-assembler -B{ HEX: fc HEX: 41 HEX: 18 HEX: 40 } [ 1 2 3 FCMPO ] test-assembler -B{ HEX: 3c HEX: 60 HEX: 12 HEX: 34 HEX: 60 HEX: 63 HEX: 56 HEX: 78 } [ HEX: 12345678 3 LOAD ] test-assembler +HEX{ 38 22 00 03 } [ 1 2 3 ADDI ] test-assembler +HEX{ 3c 22 00 03 } [ 1 2 3 ADDIS ] test-assembler +HEX{ 30 22 00 03 } [ 1 2 3 ADDIC ] test-assembler +HEX{ 34 22 00 03 } [ 1 2 3 ADDIC. ] test-assembler +HEX{ 38 40 00 01 } [ 1 2 LI ] test-assembler +HEX{ 3c 40 00 01 } [ 1 2 LIS ] test-assembler +HEX{ 38 22 ff fd } [ 1 2 3 SUBI ] test-assembler +HEX{ 1c 22 00 03 } [ 1 2 3 MULI ] test-assembler +HEX{ 7c 22 1a 14 } [ 1 2 3 ADD ] test-assembler +HEX{ 7c 22 1a 15 } [ 1 2 3 ADD. ] test-assembler +HEX{ 7c 22 1e 14 } [ 1 2 3 ADDO ] test-assembler +HEX{ 7c 22 1e 15 } [ 1 2 3 ADDO. ] test-assembler +HEX{ 7c 22 18 14 } [ 1 2 3 ADDC ] test-assembler +HEX{ 7c 22 18 15 } [ 1 2 3 ADDC. ] test-assembler +HEX{ 7c 22 1e 14 } [ 1 2 3 ADDO ] test-assembler +HEX{ 7c 22 1c 15 } [ 1 2 3 ADDCO. ] test-assembler +HEX{ 7c 22 19 14 } [ 1 2 3 ADDE ] test-assembler +HEX{ 7c 41 18 38 } [ 1 2 3 AND ] test-assembler +HEX{ 7c 41 18 39 } [ 1 2 3 AND. ] test-assembler +HEX{ 7c 22 1b d6 } [ 1 2 3 DIVW ] test-assembler +HEX{ 7c 22 1b 96 } [ 1 2 3 DIVWU ] test-assembler +HEX{ 7c 41 1a 38 } [ 1 2 3 EQV ] test-assembler +HEX{ 7c 41 1b b8 } [ 1 2 3 NAND ] test-assembler +HEX{ 7c 41 18 f8 } [ 1 2 3 NOR ] test-assembler +HEX{ 7c 41 10 f8 } [ 1 2 NOT ] test-assembler +HEX{ 60 41 00 03 } [ 1 2 3 ORI ] test-assembler +HEX{ 64 41 00 03 } [ 1 2 3 ORIS ] test-assembler +HEX{ 7c 41 1b 78 } [ 1 2 3 OR ] test-assembler +HEX{ 7c 41 13 78 } [ 1 2 MR ] test-assembler +HEX{ 7c 22 18 96 } [ 1 2 3 MULHW ] test-assembler +HEX{ 1c 22 00 03 } [ 1 2 3 MULLI ] test-assembler +HEX{ 7c 22 18 16 } [ 1 2 3 MULHWU ] test-assembler +HEX{ 7c 22 19 d6 } [ 1 2 3 MULLW ] test-assembler +HEX{ 7c 41 18 30 } [ 1 2 3 SLW ] test-assembler +HEX{ 7c 41 1e 30 } [ 1 2 3 SRAW ] test-assembler +HEX{ 7c 41 1c 30 } [ 1 2 3 SRW ] test-assembler +HEX{ 7c 41 1e 70 } [ 1 2 3 SRAWI ] test-assembler +HEX{ 7c 22 18 50 } [ 1 2 3 SUBF ] test-assembler +HEX{ 7c 22 18 10 } [ 1 2 3 SUBFC ] test-assembler +HEX{ 7c 22 19 10 } [ 1 2 3 SUBFE ] test-assembler +HEX{ 7c 41 07 74 } [ 1 2 EXTSB ] test-assembler +HEX{ 68 41 00 03 } [ 1 2 3 XORI ] test-assembler +HEX{ 7c 41 1a 78 } [ 1 2 3 XOR ] test-assembler +HEX{ 7c 22 00 d0 } [ 1 2 NEG ] test-assembler +HEX{ 2c 22 00 03 } [ 1 2 3 CMPI ] test-assembler +HEX{ 28 22 00 03 } [ 1 2 3 CMPLI ] test-assembler +HEX{ 7c 41 18 00 } [ 1 2 3 CMP ] test-assembler +HEX{ 54 22 19 0a } [ 1 2 3 4 5 RLWINM ] test-assembler +HEX{ 54 22 18 38 } [ 1 2 3 SLWI ] test-assembler +HEX{ 54 22 e8 fe } [ 1 2 3 SRWI ] test-assembler +HEX{ 88 22 00 03 } [ 1 2 3 LBZ ] test-assembler +HEX{ 8c 22 00 03 } [ 1 2 3 LBZU ] test-assembler +HEX{ a8 22 00 03 } [ 1 2 3 LHA ] test-assembler +HEX{ ac 22 00 03 } [ 1 2 3 LHAU ] test-assembler +HEX{ a0 22 00 03 } [ 1 2 3 LHZ ] test-assembler +HEX{ a4 22 00 03 } [ 1 2 3 LHZU ] test-assembler +HEX{ 80 22 00 03 } [ 1 2 3 LWZ ] test-assembler +HEX{ 84 22 00 03 } [ 1 2 3 LWZU ] test-assembler +HEX{ 7c 41 18 ae } [ 1 2 3 LBZX ] test-assembler +HEX{ 7c 41 18 ee } [ 1 2 3 LBZUX ] test-assembler +HEX{ 7c 41 1a ae } [ 1 2 3 LHAX ] test-assembler +HEX{ 7c 41 1a ee } [ 1 2 3 LHAUX ] test-assembler +HEX{ 7c 41 1a 2e } [ 1 2 3 LHZX ] test-assembler +HEX{ 7c 41 1a 6e } [ 1 2 3 LHZUX ] test-assembler +HEX{ 7c 41 18 2e } [ 1 2 3 LWZX ] test-assembler +HEX{ 7c 41 18 6e } [ 1 2 3 LWZUX ] test-assembler +HEX{ 48 00 00 01 } [ 1 B ] test-assembler +HEX{ 48 00 00 01 } [ 1 BL ] test-assembler +HEX{ 41 80 00 04 } [ 1 BLT ] test-assembler +HEX{ 41 81 00 04 } [ 1 BGT ] test-assembler +HEX{ 40 81 00 04 } [ 1 BLE ] test-assembler +HEX{ 40 80 00 04 } [ 1 BGE ] test-assembler +HEX{ 41 80 00 04 } [ 1 BLT ] test-assembler +HEX{ 40 82 00 04 } [ 1 BNE ] test-assembler +HEX{ 41 82 00 04 } [ 1 BEQ ] test-assembler +HEX{ 41 83 00 04 } [ 1 BO ] test-assembler +HEX{ 40 83 00 04 } [ 1 BNO ] test-assembler +HEX{ 4c 20 00 20 } [ 1 BCLR ] test-assembler +HEX{ 4e 80 00 20 } [ BLR ] test-assembler +HEX{ 4e 80 00 21 } [ BLRL ] test-assembler +HEX{ 4c 20 04 20 } [ 1 BCCTR ] test-assembler +HEX{ 4e 80 04 20 } [ BCTR ] test-assembler +HEX{ 7c 61 02 a6 } [ 3 MFXER ] test-assembler +HEX{ 7c 68 02 a6 } [ 3 MFLR ] test-assembler +HEX{ 7c 69 02 a6 } [ 3 MFCTR ] test-assembler +HEX{ 7c 61 03 a6 } [ 3 MTXER ] test-assembler +HEX{ 7c 68 03 a6 } [ 3 MTLR ] test-assembler +HEX{ 7c 69 03 a6 } [ 3 MTCTR ] test-assembler +HEX{ 7c 61 02 a6 } [ 3 MFXER ] test-assembler +HEX{ 7c 68 02 a6 } [ 3 MFLR ] test-assembler +HEX{ c0 22 00 03 } [ 1 2 3 LFS ] test-assembler +HEX{ c4 22 00 03 } [ 1 2 3 LFSU ] test-assembler +HEX{ c8 22 00 03 } [ 1 2 3 LFD ] test-assembler +HEX{ cc 22 00 03 } [ 1 2 3 LFDU ] test-assembler +HEX{ d0 22 00 03 } [ 1 2 3 STFS ] test-assembler +HEX{ d4 22 00 03 } [ 1 2 3 STFSU ] test-assembler +HEX{ d8 22 00 03 } [ 1 2 3 STFD ] test-assembler +HEX{ dc 22 00 03 } [ 1 2 3 STFDU ] test-assembler +HEX{ fc 20 10 90 } [ 1 2 FMR ] test-assembler +HEX{ fc 40 08 90 } [ 2 1 FMR ] test-assembler +HEX{ fc 20 10 91 } [ 1 2 FMR. ] test-assembler +HEX{ fc 40 08 91 } [ 2 1 FMR. ] test-assembler +HEX{ fc 20 10 1e } [ 1 2 FCTIWZ ] test-assembler +HEX{ fc 22 18 2a } [ 1 2 3 FADD ] test-assembler +HEX{ fc 22 18 2b } [ 1 2 3 FADD. ] test-assembler +HEX{ fc 22 18 28 } [ 1 2 3 FSUB ] test-assembler +HEX{ fc 22 00 f2 } [ 1 2 3 FMUL ] test-assembler +HEX{ fc 22 18 24 } [ 1 2 3 FDIV ] test-assembler +HEX{ fc 20 10 2c } [ 1 2 FSQRT ] test-assembler +HEX{ fc 41 18 00 } [ 1 2 3 FCMPU ] test-assembler +HEX{ fc 41 18 40 } [ 1 2 3 FCMPO ] test-assembler +HEX{ 3c 60 12 34 60 63 56 78 } [ HEX: 12345678 3 LOAD ] test-assembler diff --git a/basis/cpu/ppc/assembler/assembler.factor b/basis/cpu/ppc/assembler/assembler.factor index 2daf3678ce..f59f8779ef 100644 --- a/basis/cpu/ppc/assembler/assembler.factor +++ b/basis/cpu/ppc/assembler/assembler.factor @@ -1,6 +1,6 @@ -! Copyright (C) 2005, 2008 Slava Pestov. +! Copyright (C) 2005, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel namespaces words io.binary math math.order +USING: kernel namespaces words math math.order locals cpu.ppc.assembler.backend ; IN: cpu.ppc.assembler @@ -97,8 +97,8 @@ X: XOR 0 316 31 X: XOR. 1 316 31 X1: EXTSB 0 954 31 X1: EXTSB. 1 954 31 -: FMR ( a s -- ) [ 0 ] 2dip 72 0 63 x-insn ; -: FMR. ( a s -- ) [ 0 ] 2dip 72 1 63 x-insn ; +: FMR ( a s -- ) [ 0 ] 2dip 0 72 63 x-insn ; +: FMR. ( a s -- ) [ 0 ] 2dip 1 72 63 x-insn ; : FCTIWZ ( a s -- ) [ 0 ] 2dip 0 15 63 x-insn ; : FCTIWZ. ( a s -- ) [ 0 ] 2dip 1 15 63 x-insn ; @@ -189,9 +189,9 @@ MTSPR: LR 8 MTSPR: CTR 9 ! Pseudo-instructions -: LI ( value dst -- ) 0 rot ADDI ; inline +: LI ( value dst -- ) swap [ 0 ] dip ADDI ; inline : SUBI ( dst src1 src2 -- ) neg ADDI ; inline -: LIS ( value dst -- ) 0 rot ADDIS ; inline +: LIS ( value dst -- ) swap [ 0 ] dip ADDIS ; inline : SUBIC ( dst src1 src2 -- ) neg ADDIC ; inline : SUBIC. ( dst src1 src2 -- ) neg ADDIC. ; inline : NOT ( dst src -- ) dup NOR ; inline @@ -204,6 +204,8 @@ MTSPR: CTR 9 : (SRWI) ( d a b -- d a b x y ) 32 over - swap 31 ; inline : SRWI ( d a b -- ) (SRWI) RLWINM ; : SRWI. ( d a b -- ) (SRWI) RLWINM. ; -: LOAD32 ( n r -- ) [ w>h/h ] dip tuck LIS dup rot ORI ; +:: LOAD32 ( n r -- ) + n -16 shift HEX: 7fff bitand r LIS + r r n HEX: 7fff bitand ORI ; : immediate? ( n -- ? ) HEX: -8000 HEX: 7fff between? ; : LOAD ( n r -- ) over immediate? [ LI ] [ LOAD32 ] if ; diff --git a/basis/cpu/ppc/ppc.factor b/basis/cpu/ppc/ppc.factor index d6674e7097..aec7e85b56 100644 --- a/basis/cpu/ppc/ppc.factor +++ b/basis/cpu/ppc/ppc.factor @@ -62,7 +62,7 @@ M: rs-loc loc-reg drop rs-reg ; M: ppc %peek loc>operand LWZ ; M: ppc %replace loc>operand STW ; -: (%inc) ( n reg -- ) dup rot cells ADDI ; inline +:: (%inc) ( n reg -- ) reg reg n cells ADDI ; inline M: ppc %inc-d ( n -- ) ds-reg (%inc) ; M: ppc %inc-r ( n -- ) rs-reg (%inc) ; diff --git a/basis/cpu/x86/32/32.factor b/basis/cpu/x86/32/32.factor index bd03b47302..74312c3718 100755 --- a/basis/cpu/x86/32/32.factor +++ b/basis/cpu/x86/32/32.factor @@ -208,13 +208,13 @@ M: x86 %unbox-small-struct ( size -- ) { 2 [ %unbox-struct-2 ] } } case ; -M: x86.32 %unbox-large-struct ( n c-type -- ) +M:: x86.32 %unbox-large-struct ( n c-type -- ) ! Alien must be in EAX. ! Compute destination address - ECX rot stack@ LEA + ECX n stack@ LEA 12 [ ! Push struct size - heap-size PUSH + c-type heap-size PUSH ! Push destination address ECX PUSH ! Push source address diff --git a/basis/cpu/x86/64/64.factor b/basis/cpu/x86/64/64.factor index 7c832fe66c..145d4ff677 100644 --- a/basis/cpu/x86/64/64.factor +++ b/basis/cpu/x86/64/64.factor @@ -102,13 +102,12 @@ M: x86.64 %unbox-small-struct ( c-type -- ) flatten-value-type [ %unbox-struct-field ] each-index ] with-return-regs ; -M: x86.64 %unbox-large-struct ( n c-type -- ) +M:: x86.64 %unbox-large-struct ( n c-type -- ) ! Source is in param-reg-1 - heap-size - ! Load destination address - param-reg-2 rot param@ LEA - ! Load structure size - param-reg-3 swap MOV + ! Load destination address into param-reg-2 + param-reg-2 n param@ LEA + ! Load structure size into param-reg-3 + param-reg-3 c-type heap-size MOV ! Copy the struct to the C stack "to_value_struct" f %alien-invoke ; diff --git a/extra/benchmark/raytracer/raytracer.factor b/extra/benchmark/raytracer/raytracer.factor index 25915404be..de9b80b4ca 100755 --- a/extra/benchmark/raytracer/raytracer.factor +++ b/extra/benchmark/raytracer/raytracer.factor @@ -155,7 +155,7 @@ DEFER: create ( level c r -- scene ) ] with map ; : ray-pixel ( scene point -- n ) - ss-grid ray-grid 0.0 -rot + ss-grid ray-grid [ 0.0 ] 2dip [ [ swap cast-ray + ] with each ] with each ; : pixel-grid ( -- grid )