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 ------------------------------------------ */ |
