aboutsummaryrefslogtreecommitdiff
path: root/src/lj_ircall.h
diff options
context:
space:
mode:
authorMike Pall <mike>2017-06-07 23:56:54 +0200
committerMike Pall <mike>2017-06-07 23:56:54 +0200
commita057a07ab702e225e21848d4f918886c5b0ac06b (patch)
tree5223cc2660144bac4c1daff5d6110a43ed4d96f2 /src/lj_ircall.h
parent0e4a551809138b0e63d7d491710aa906b174495f (diff)
downloadluajit-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.h43
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) \