diff options
author | Mike Pall <mike> | 2010-09-07 01:24:25 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-07 01:24:25 +0200 |
commit | db735e051951ceed2cd9f097dd7b09879b8d8790 (patch) | |
tree | 0bb25c693b9a4149a1fe0344b81987feb10396e4 /src | |
parent | 15834c39908094df81d428f10f022dea0a0f5558 (diff) | |
download | luajit-db735e051951ceed2cd9f097dd7b09879b8d8790.tar.gz luajit-db735e051951ceed2cd9f097dd7b09879b8d8790.tar.bz2 luajit-db735e051951ceed2cd9f097dd7b09879b8d8790.zip |
PPC: Add binary arithmetic instructions (except MOD).
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 52 |
1 files changed, 47 insertions, 5 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 960f9b7b..6b71ec84 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -1160,17 +1160,50 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
1160 | 1160 | ||
1161 | /* -- Binary ops -------------------------------------------------------- */ | 1161 | /* -- Binary ops -------------------------------------------------------- */ |
1162 | 1162 | ||
1163 | |.macro ins_arithpre, t0, t1 | ||
1164 | | // RA = dst*8, RB = src1*8, RC = src2*8 | num_const*8 | ||
1165 | ||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | ||
1166 | ||switch (vk) { | ||
1167 | ||case 0: | ||
1168 | | evlddx t0, BASE, RB | ||
1169 | | checknum t0 | ||
1170 | | evlddx t1, KBASE, RC | ||
1171 | | checkfail ->vmeta_arith_vn | ||
1172 | || break; | ||
1173 | ||case 1: | ||
1174 | | evlddx t1, BASE, RB | ||
1175 | | checknum t1 | ||
1176 | | evlddx t0, KBASE, RC | ||
1177 | | checkfail ->vmeta_arith_nv | ||
1178 | || break; | ||
1179 | ||default: | ||
1180 | | evlddx t0, BASE, RB | ||
1181 | | evlddx t1, BASE, RC | ||
1182 | | evmergehi TMP2, t0, t1 | ||
1183 | | checknum TMP2 | ||
1184 | | checkanyfail ->vmeta_arith_vv | ||
1185 | || break; | ||
1186 | ||} | ||
1187 | |.endmacro | ||
1188 | | | ||
1189 | |.macro ins_arith, ins | ||
1190 | | ins_arithpre TMP0, TMP1 | ||
1191 | | ins TMP0, TMP0, TMP1 | ||
1192 | | evstddx TMP0, BASE, RA | ||
1193 | | ins_next | ||
1194 | |.endmacro | ||
1195 | |||
1163 | case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: | 1196 | case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: |
1164 | | NYI | 1197 | | ins_arith efdadd |
1165 | break; | 1198 | break; |
1166 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: | 1199 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: |
1167 | | NYI | 1200 | | ins_arith efdsub |
1168 | break; | 1201 | break; |
1169 | case BC_MULVN: case BC_MULNV: case BC_MULVV: | 1202 | case BC_MULVN: case BC_MULNV: case BC_MULVV: |
1170 | | NYI | 1203 | | ins_arith efdmul |
1171 | break; | 1204 | break; |
1172 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: | 1205 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: |
1173 | | NYI | 1206 | | ins_arith efddiv |
1174 | break; | 1207 | break; |
1175 | case BC_MODVN: | 1208 | case BC_MODVN: |
1176 | | NYI | 1209 | | NYI |
@@ -1179,7 +1212,16 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
1179 | | NYI | 1212 | | NYI |
1180 | break; | 1213 | break; |
1181 | case BC_POW: | 1214 | case BC_POW: |
1182 | | NYI | 1215 | | evlddx CARG2, BASE, RB |
1216 | | evlddx CARG4, BASE, RC | ||
1217 | | evmergehi CARG1, CARG4, CARG2 | ||
1218 | | checknum CARG1 | ||
1219 | | evmergehi CARG3, CARG4, CARG4 | ||
1220 | | checkanyfail ->vmeta_arith_vv | ||
1221 | | bl extern pow | ||
1222 | | evmergelo CRET2, CRET1, CRET2 | ||
1223 | | evstddx CRET2, BASE, RA | ||
1224 | | ins_next | ||
1183 | break; | 1225 | break; |
1184 | 1226 | ||
1185 | case BC_CAT: | 1227 | case BC_CAT: |