aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-07 01:24:25 +0200
committerMike Pall <mike>2010-09-07 01:24:25 +0200
commitdb735e051951ceed2cd9f097dd7b09879b8d8790 (patch)
tree0bb25c693b9a4149a1fe0344b81987feb10396e4 /src
parent15834c39908094df81d428f10f022dea0a0f5558 (diff)
downloadluajit-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.dasc52
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: