aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-30 02:56:54 +0200
committerMike Pall <mike>2010-09-30 02:56:54 +0200
commit4afff973a414a0d596d9a65c1c207e705dc5176e (patch)
treed35a2b08ba0571a3b78dc309af6c0502b76a5d0d /src
parent408cd055a4547b22bfa0a10947d75fbeb284a360 (diff)
downloadluajit-4afff973a414a0d596d9a65c1c207e705dc5176e.tar.gz
luajit-4afff973a414a0d596d9a65c1c207e705dc5176e.tar.bz2
luajit-4afff973a414a0d596d9a65c1c207e705dc5176e.zip
PPC: Add bit.* fast functions.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc83
1 files changed, 53 insertions, 30 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 67c4f75c..5c418797 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -140,6 +140,8 @@
140|// These basic macros should really be part of DynASM. 140|// These basic macros should really be part of DynASM.
141|.macro srwi, rx, ry, n; rlwinm rx, ry, 32-n, n, 31; .endmacro 141|.macro srwi, rx, ry, n; rlwinm rx, ry, 32-n, n, 31; .endmacro
142|.macro slwi, rx, ry, n; rlwinm rx, ry, n, 0, 31-n; .endmacro 142|.macro slwi, rx, ry, n; rlwinm rx, ry, n, 0, 31-n; .endmacro
143|.macro rotlwi, rx, ry, n; rlwinm rx, ry, n, 0, 31; .endmacro
144|.macro rotlw, rx, ry, rn; rlwnm rx, ry, rn, 0, 31; .endmacro
143|.macro subi, rx, ry, i; addi rx, ry, -i; .endmacro 145|.macro subi, rx, ry, i; addi rx, ry, -i; .endmacro
144| 146|
145|// Trap for not-yet-implemented parts. 147|// Trap for not-yet-implemented parts.
@@ -1103,45 +1105,66 @@ static void build_subroutines(BuildCtx *ctx)
1103 | 1105 |
1104 |//-- Bit library -------------------------------------------------------- 1106 |//-- Bit library --------------------------------------------------------
1105 | 1107 |
1106 |.ffunc_n bit_tobit
1107 | NYI
1108 |
1109 |.macro .ffunc_bit, name 1108 |.macro .ffunc_bit, name
1110 | .ffunc_n name 1109 | .ffunc_n bit_..name
1111 | NYI 1110 | efdadd CARG1, CARG1, TOBIT
1112 |.endmacro 1111 |.endmacro
1113 | 1112 |
1113 |.ffunc_bit tobit
1114 |->fff_resbit:
1115 | efdcfsi CRET1, CARG1
1116 | b ->fff_restv
1117 |
1114 |.macro .ffunc_bit_op, name, ins 1118 |.macro .ffunc_bit_op, name, ins
1115 | .ffunc_bit name 1119 | .ffunc_bit name
1116 | NYI 1120 | li TMP1, 8
1121 |1:
1122 | evlddx CARG2, BASE, TMP1
1123 | cmplw cr1, TMP1, NARGS8:RC
1124 | checknum CARG2
1125 | bge cr1, ->fff_resbit
1126 | checkfail ->fff_fallback
1127 | efdadd CARG2, CARG2, TOBIT
1128 | ins CARG1, CARG1, CARG2
1129 | addi TMP1, TMP1, 8
1130 | b <1
1117 |.endmacro 1131 |.endmacro
1118 | 1132 |
1119 |.ffunc_bit_op bit_band, and 1133 |.ffunc_bit_op band, and
1120 |.ffunc_bit_op bit_bor, or 1134 |.ffunc_bit_op bor, or
1121 |.ffunc_bit_op bit_bxor, xor 1135 |.ffunc_bit_op bxor, xor
1122 | 1136 |
1123 |.ffunc_bit bit_bswap 1137 |.ffunc_bit bswap
1124 | NYI 1138 | rotlwi TMP0, CARG1, 8
1125 | 1139 | rlwimi TMP0, CARG1, 24, 0, 7
1126 |.ffunc_bit bit_bnot 1140 | rlwimi TMP0, CARG1, 24, 16, 23
1127 | NYI 1141 | efdcfsi CRET1, TMP0
1128 | 1142 | b ->fff_restv
1129 |->fff_resbit: 1143 |
1130 | NYI 1144 |.ffunc_bit bnot
1131 | 1145 | not TMP0, CARG1
1132 |->fff_fallback_bit_op: 1146 | efdcfsi CRET1, TMP0
1133 | NYI 1147 | b ->fff_restv
1134 | 1148 |
1135 |.macro .ffunc_bit_sh, name, ins 1149 |.macro .ffunc_bit_sh, name, ins, shmod
1136 | .ffunc_nn name 1150 | .ffunc_nn bit_..name
1137 | NYI 1151 | efdadd CARG2, CARG2, TOBIT
1152 | efdadd CARG1, CARG1, TOBIT
1153 |.if shmod == 1
1154 | rlwinm CARG2, CARG2, 0, 27, 31
1155 |.elif shmod == 2
1156 | neg CARG2, CARG2
1157 |.endif
1158 | ins TMP0, CARG1, CARG2
1159 | efdcfsi CRET1, TMP0
1160 | b ->fff_restv
1138 |.endmacro 1161 |.endmacro
1139 | 1162 |
1140 |.ffunc_bit_sh bit_lshift, shl 1163 |.ffunc_bit_sh lshift, slw, 1
1141 |.ffunc_bit_sh bit_rshift, shr 1164 |.ffunc_bit_sh rshift, srw, 1
1142 |.ffunc_bit_sh bit_arshift, sar 1165 |.ffunc_bit_sh arshift, sraw, 1
1143 |.ffunc_bit_sh bit_rol, rol 1166 |.ffunc_bit_sh rol, rotlw, 0
1144 |.ffunc_bit_sh bit_ror, ror 1167 |.ffunc_bit_sh ror, rotlw, 2
1145 | 1168 |
1146 |//----------------------------------------------------------------------- 1169 |//-----------------------------------------------------------------------
1147 | 1170 |