diff options
author | Mike Pall <mike> | 2017-06-07 23:56:54 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2017-06-07 23:56:54 +0200 |
commit | a057a07ab702e225e21848d4f918886c5b0ac06b (patch) | |
tree | 5223cc2660144bac4c1daff5d6110a43ed4d96f2 /src/lj_ircall.h | |
parent | 0e4a551809138b0e63d7d491710aa906b174495f (diff) | |
download | luajit-a057a07ab702e225e21848d4f918886c5b0ac06b.tar.gz luajit-a057a07ab702e225e21848d4f918886c5b0ac06b.tar.bz2 luajit-a057a07ab702e225e21848d4f918886c5b0ac06b.zip |
MIPS64: Add soft-float support to JIT compiler backend.
Contributed by Djordje Kovacevic and Stefan Pejic from RT-RK.com.
Sponsored by Cisco Systems, Inc.
Diffstat (limited to 'src/lj_ircall.h')
-rw-r--r-- | src/lj_ircall.h | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/src/lj_ircall.h b/src/lj_ircall.h index 973c36e6..73120065 100644 --- a/src/lj_ircall.h +++ b/src/lj_ircall.h | |||
@@ -51,7 +51,7 @@ typedef struct CCallInfo { | |||
51 | #define CCI_XARGS(ci) (((ci)->flags >> CCI_XARGS_SHIFT) & 3) | 51 | #define CCI_XARGS(ci) (((ci)->flags >> CCI_XARGS_SHIFT) & 3) |
52 | #define CCI_XA (1u << CCI_XARGS_SHIFT) | 52 | #define CCI_XA (1u << CCI_XARGS_SHIFT) |
53 | 53 | ||
54 | #if LJ_SOFTFP || (LJ_32 && LJ_HASFFI) | 54 | #if LJ_SOFTFP32 || (LJ_32 && LJ_HASFFI) |
55 | #define CCI_XNARGS(ci) (CCI_NARGS((ci)) + CCI_XARGS((ci))) | 55 | #define CCI_XNARGS(ci) (CCI_NARGS((ci)) + CCI_XARGS((ci))) |
56 | #else | 56 | #else |
57 | #define CCI_XNARGS(ci) CCI_NARGS((ci)) | 57 | #define CCI_XNARGS(ci) CCI_NARGS((ci)) |
@@ -78,13 +78,19 @@ typedef struct CCallInfo { | |||
78 | #define IRCALLCOND_SOFTFP_FFI(x) NULL | 78 | #define IRCALLCOND_SOFTFP_FFI(x) NULL |
79 | #endif | 79 | #endif |
80 | 80 | ||
81 | #if LJ_SOFTFP && LJ_TARGET_MIPS32 | 81 | #if LJ_SOFTFP && LJ_TARGET_MIPS |
82 | #define IRCALLCOND_SOFTFP_MIPS(x) x | 82 | #define IRCALLCOND_SOFTFP_MIPS(x) x |
83 | #else | 83 | #else |
84 | #define IRCALLCOND_SOFTFP_MIPS(x) NULL | 84 | #define IRCALLCOND_SOFTFP_MIPS(x) NULL |
85 | #endif | 85 | #endif |
86 | 86 | ||
87 | #define LJ_NEED_FP64 (LJ_TARGET_ARM || LJ_TARGET_PPC || LJ_TARGET_MIPS32) | 87 | #if LJ_SOFTFP && LJ_TARGET_MIPS64 |
88 | #define IRCALLCOND_SOFTFP_MIPS64(x) x | ||
89 | #else | ||
90 | #define IRCALLCOND_SOFTFP_MIPS64(x) NULL | ||
91 | #endif | ||
92 | |||
93 | #define LJ_NEED_FP64 (LJ_TARGET_ARM || LJ_TARGET_PPC || LJ_TARGET_MIPS) | ||
88 | 94 | ||
89 | #if LJ_HASFFI && (LJ_SOFTFP || LJ_NEED_FP64) | 95 | #if LJ_HASFFI && (LJ_SOFTFP || LJ_NEED_FP64) |
90 | #define IRCALLCOND_FP64_FFI(x) x | 96 | #define IRCALLCOND_FP64_FFI(x) x |
@@ -112,6 +118,14 @@ typedef struct CCallInfo { | |||
112 | #define XA2_FP 0 | 118 | #define XA2_FP 0 |
113 | #endif | 119 | #endif |
114 | 120 | ||
121 | #if LJ_SOFTFP32 | ||
122 | #define XA_FP32 CCI_XA | ||
123 | #define XA2_FP32 (CCI_XA+CCI_XA) | ||
124 | #else | ||
125 | #define XA_FP32 0 | ||
126 | #define XA2_FP32 0 | ||
127 | #endif | ||
128 | |||
115 | #if LJ_32 | 129 | #if LJ_32 |
116 | #define XA_64 CCI_XA | 130 | #define XA_64 CCI_XA |
117 | #define XA2_64 (CCI_XA+CCI_XA) | 131 | #define XA2_64 (CCI_XA+CCI_XA) |
@@ -181,20 +195,21 @@ typedef struct CCallInfo { | |||
181 | _(ANY, pow, 2, N, NUM, XA2_FP) \ | 195 | _(ANY, pow, 2, N, NUM, XA2_FP) \ |
182 | _(ANY, atan2, 2, N, NUM, XA2_FP) \ | 196 | _(ANY, atan2, 2, N, NUM, XA2_FP) \ |
183 | _(ANY, ldexp, 2, N, NUM, XA_FP) \ | 197 | _(ANY, ldexp, 2, N, NUM, XA_FP) \ |
184 | _(SOFTFP, lj_vm_tobit, 2, N, INT, 0) \ | 198 | _(SOFTFP, lj_vm_tobit, 1, N, INT, XA_FP32) \ |
185 | _(SOFTFP, softfp_add, 4, N, NUM, 0) \ | 199 | _(SOFTFP, softfp_add, 2, N, NUM, XA2_FP32) \ |
186 | _(SOFTFP, softfp_sub, 4, N, NUM, 0) \ | 200 | _(SOFTFP, softfp_sub, 2, N, NUM, XA2_FP32) \ |
187 | _(SOFTFP, softfp_mul, 4, N, NUM, 0) \ | 201 | _(SOFTFP, softfp_mul, 2, N, NUM, XA2_FP32) \ |
188 | _(SOFTFP, softfp_div, 4, N, NUM, 0) \ | 202 | _(SOFTFP, softfp_div, 2, N, NUM, XA2_FP32) \ |
189 | _(SOFTFP, softfp_cmp, 4, N, NIL, 0) \ | 203 | _(SOFTFP, softfp_cmp, 2, N, NIL, XA2_FP32) \ |
190 | _(SOFTFP, softfp_i2d, 1, N, NUM, 0) \ | 204 | _(SOFTFP, softfp_i2d, 1, N, NUM, 0) \ |
191 | _(SOFTFP, softfp_d2i, 2, N, INT, 0) \ | 205 | _(SOFTFP, softfp_d2i, 1, N, INT, XA_FP32) \ |
192 | _(SOFTFP_MIPS, lj_vm_sfmin, 4, N, NUM, 0) \ | 206 | _(SOFTFP_MIPS, lj_vm_sfmin, 2, N, NUM, XA2_FP32) \ |
193 | _(SOFTFP_MIPS, lj_vm_sfmax, 4, N, NUM, 0) \ | 207 | _(SOFTFP_MIPS, lj_vm_sfmax, 2, N, NUM, XA2_FP32) \ |
208 | _(SOFTFP_MIPS64, lj_vm_tointg, 1, N, INT, 0) \ | ||
194 | _(SOFTFP_FFI, softfp_ui2d, 1, N, NUM, 0) \ | 209 | _(SOFTFP_FFI, softfp_ui2d, 1, N, NUM, 0) \ |
195 | _(SOFTFP_FFI, softfp_f2d, 1, N, NUM, 0) \ | 210 | _(SOFTFP_FFI, softfp_f2d, 1, N, NUM, 0) \ |
196 | _(SOFTFP_FFI, softfp_d2ui, 2, N, INT, 0) \ | 211 | _(SOFTFP_FFI, softfp_d2ui, 1, N, INT, XA_FP32) \ |
197 | _(SOFTFP_FFI, softfp_d2f, 2, N, FLOAT, 0) \ | 212 | _(SOFTFP_FFI, softfp_d2f, 1, N, FLOAT, XA_FP32) \ |
198 | _(SOFTFP_FFI, softfp_i2f, 1, N, FLOAT, 0) \ | 213 | _(SOFTFP_FFI, softfp_i2f, 1, N, FLOAT, 0) \ |
199 | _(SOFTFP_FFI, softfp_ui2f, 1, N, FLOAT, 0) \ | 214 | _(SOFTFP_FFI, softfp_ui2f, 1, N, FLOAT, 0) \ |
200 | _(SOFTFP_FFI, softfp_f2i, 1, N, INT, 0) \ | 215 | _(SOFTFP_FFI, softfp_f2i, 1, N, INT, 0) \ |