aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-01 00:19:27 +0200
committerMike Pall <mike>2010-09-01 00:19:27 +0200
commitd71bd78b8fd1a5aa89802581672329190dcf1a5d (patch)
tree3b1819cc795f2d50077907dfa2bce6f68523e34a /src
parent8876704e05a33fc91c0b1eb69199d0b8459bd859 (diff)
downloadluajit-d71bd78b8fd1a5aa89802581672329190dcf1a5d.tar.gz
luajit-d71bd78b8fd1a5aa89802581672329190dcf1a5d.tar.bz2
luajit-d71bd78b8fd1a5aa89802581672329190dcf1a5d.zip
PPC: Add move and constant instructions.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc41
1 files changed, 35 insertions, 6 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 1a74c51f..7e8178cd 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -912,7 +912,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
912 /* -- Unary ops --------------------------------------------------------- */ 912 /* -- Unary ops --------------------------------------------------------- */
913 913
914 case BC_MOV: 914 case BC_MOV:
915 | NYI 915 | // RA = dst*8, RD = src*8
916 | evlddx TMP0, BASE, RD
917 | evstddx TMP0, BASE, RA
918 | ins_next_
916 break; 919 break;
917 case BC_NOT: 920 case BC_NOT:
918 | NYI 921 | NYI
@@ -955,19 +958,45 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
955 /* -- Constant ops ------------------------------------------------------ */ 958 /* -- Constant ops ------------------------------------------------------ */
956 959
957 case BC_KSTR: 960 case BC_KSTR:
958 | NYI 961 | // RA = dst*8, RD = str_const*8 (~)
962 | srwi TMP1, RD, 1
963 | subfic TMP1, TMP1, -4
964 | lwzx TMP0, KBASE, TMP1 // KBASE-4-str_const*4
965 | evmergelo TMP0, TISSTR, TMP0
966 | evstddx TMP0, BASE, RA
967 | ins_next
959 break; 968 break;
960 case BC_KSHORT: 969 case BC_KSHORT:
961 | NYI 970 | // RA = dst*8, RD = int16_literal*8
971 | srwi TMP1, RD, 3
972 | extsh TMP1, TMP1
973 | efdcfsi TMP0, TMP1
974 | evstddx TMP0, BASE, RA
975 | ins_next
962 break; 976 break;
963 case BC_KNUM: 977 case BC_KNUM:
964 | NYI 978 | // RA = dst*8, RD = num_const*8
979 | evlddx TMP0, KBASE, RD
980 | evstddx TMP0, BASE, RA
981 | ins_next
965 break; 982 break;
966 case BC_KPRI: 983 case BC_KPRI:
967 | NYI 984 | // RA = dst*8, RD = primitive_type*8 (~)
985 | srwi TMP1, RD, 3
986 | not TMP0, TMP1
987 | stwx TMP0, BASE, RA
988 | ins_next
968 break; 989 break;
969 case BC_KNIL: 990 case BC_KNIL:
970 | NYI 991 | // RA = base*8, RD = end*8
992 | evstddx TISNIL, BASE, RA
993 | addi RA, RA, 8
994 |1:
995 | evstddx TISNIL, BASE, RA
996 | cmpw RA, RD
997 | addi RA, RA, 8
998 | blt <1
999 | ins_next
971 break; 1000 break;
972 1001
973 /* -- Upvalue and function ops ------------------------------------------ */ 1002 /* -- Upvalue and function ops ------------------------------------------ */