diff options
author | Mike Pall <mike> | 2010-09-01 00:19:27 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-01 00:19:27 +0200 |
commit | d71bd78b8fd1a5aa89802581672329190dcf1a5d (patch) | |
tree | 3b1819cc795f2d50077907dfa2bce6f68523e34a /src | |
parent | 8876704e05a33fc91c0b1eb69199d0b8459bd859 (diff) | |
download | luajit-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.dasc | 41 |
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 ------------------------------------------ */ |