diff options
author | Mike Pall <mike> | 2010-09-07 01:15:21 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-07 01:15:21 +0200 |
commit | 15834c39908094df81d428f10f022dea0a0f5558 (patch) | |
tree | fb11376b4a001edc8c2491e1556cd15b754b936c /src | |
parent | 341820987bcd901d46a7ae4bd6f316eac30f1aa4 (diff) | |
download | luajit-15834c39908094df81d428f10f022dea0a0f5558.tar.gz luajit-15834c39908094df81d428f10f022dea0a0f5558.tar.bz2 luajit-15834c39908094df81d428f10f022dea0a0f5558.zip |
PPC: Add unary instructions.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 6989c447..960f9b7b 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -1121,13 +1121,41 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
1121 | | ins_next_ | 1121 | | ins_next_ |
1122 | break; | 1122 | break; |
1123 | case BC_NOT: | 1123 | case BC_NOT: |
1124 | | NYI | 1124 | | // RA = dst*8, RD = src*8 |
1125 | | lwzx TMP0, BASE, RD | ||
1126 | | subfic TMP1, TMP0, LJ_TTRUE | ||
1127 | | adde TMP0, TMP0, TMP1 | ||
1128 | | stwx TMP0, BASE, RA | ||
1129 | | ins_next | ||
1125 | break; | 1130 | break; |
1126 | case BC_UNM: | 1131 | case BC_UNM: |
1127 | | NYI | 1132 | | // RA = dst*8, RD = src*8 |
1133 | | evlddx TMP0, BASE, RD | ||
1134 | | lus TMP1, 0x8000 | ||
1135 | | li TMP2, 0 | ||
1136 | | checknum TMP0 | ||
1137 | | evmergelo TMP1, TMP1, TMP2 | ||
1138 | | checkfail ->vmeta_unm | ||
1139 | | evxor TMP0, TMP0, TMP1 | ||
1140 | | evstddx TMP0, BASE, RA | ||
1141 | | ins_next | ||
1128 | break; | 1142 | break; |
1129 | case BC_LEN: | 1143 | case BC_LEN: |
1130 | | NYI | 1144 | | // RA = dst*8, RD = src*8 |
1145 | | evlddx CARG1, BASE, RD | ||
1146 | | checkstr CARG1 | ||
1147 | | checkfail >2 | ||
1148 | | lwz CRET1, STR:CARG1->len | ||
1149 | |1: | ||
1150 | | efdcfsi TMP0, CRET1 | ||
1151 | | evstddx TMP0, BASE, RA | ||
1152 | | ins_next | ||
1153 | |2: | ||
1154 | | checktab CARG1 | ||
1155 | | checkfail ->vmeta_len | ||
1156 | | bl extern lj_tab_len // (GCtab *t) | ||
1157 | | // Returns uint32_t (but less than 2^31). | ||
1158 | | b <1 | ||
1131 | break; | 1159 | break; |
1132 | 1160 | ||
1133 | /* -- Binary ops -------------------------------------------------------- */ | 1161 | /* -- Binary ops -------------------------------------------------------- */ |