aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode-jit.c
diff options
context:
space:
mode:
authorNickolas Lloyd2016-12-27 13:27:18 -0500
committerNickolas Lloyd2016-12-27 14:21:07 -0500
commit86357df0e06d9fc4125eb668337657d27148cdce (patch)
tree582c97bc070b598efe9c11d2dcbf6e89ae4b016c /src/bytecode-jit.c
parent68c56c064e8c72ec924583e39ce6ab5ecf0f31c5 (diff)
downloademacs-86357df0e06d9fc4125eb668337657d27148cdce.tar.gz
emacs-86357df0e06d9fc4125eb668337657d27148cdce.zip
; Change JIT_* macros to return a value.
Diffstat (limited to 'src/bytecode-jit.c')
-rw-r--r--src/bytecode-jit.c90
1 files changed, 39 insertions, 51 deletions
diff --git a/src/bytecode-jit.c b/src/bytecode-jit.c
index 00f9ef6d19f..91924d63cbf 100644
--- a/src/bytecode-jit.c
+++ b/src/bytecode-jit.c
@@ -948,18 +948,17 @@ jit_byte_code__ (Lisp_Object byte_code)
948#define JIT_PUSH(v) \ 948#define JIT_PUSH(v) \
949 jit_push (&ctxt, v) 949 jit_push (&ctxt, v)
950 950
951#define JIT_TOP(v) \ 951#define JIT_TOP() \
952 (v = jit_top (&ctxt)) 952 jit_top (&ctxt)
953 953
954#define JIT_POP(v) \ 954#define JIT_POP() \
955 (v = jit_pop (&ctxt)) 955 jit_pop (&ctxt)
956 956
957#define JIT_CALL(f, args, n) \ 957#define JIT_CALL(f, args, n) \
958 jit_call (&ctxt, (void *)&f, #f, f##_sig, args, n) 958 jit_call (&ctxt, (void *)&f, #f, f##_sig, args, n)
959 959
960#define JIT_CALL_ARGS(r, f, ...) \ 960#define JIT_CALL_ARGS(f, ...) \
961 (r = jit_call_vaarg (&ctxt, (void *)&f, #f, f##_sig, \ 961 jit_call_vaarg (&ctxt, (void *)&f, #f, f##_sig, __VA_ARGS__, NULL)
962 __VA_ARGS__, NULL))
963 962
964#define JIT_CONSTANT(t, v) \ 963#define JIT_CONSTANT(t, v) \
965 jit_value_create_nint_constant ( \ 964 jit_value_create_nint_constant ( \
@@ -1051,21 +1050,19 @@ jit_byte_code__ (Lisp_Object byte_code)
1051 op = FETCH; 1050 op = FETCH;
1052 varset: 1051 varset:
1053 { 1052 {
1054 jit_value_t sym, val, x;
1055 JIT_NEED_STACK; 1053 JIT_NEED_STACK;
1056 sym = JIT_CONSTANT (jit_type_Lisp_Object, vectorp[op]); 1054 JIT_CALL_ARGS (native_varset, JIT_CONSTANT (jit_type_Lisp_Object,
1057 JIT_POP (val); 1055 vectorp[op]),
1058 JIT_CALL_ARGS (x, native_varset, sym, val); 1056 JIT_POP ());
1057
1059 JIT_NEXT; 1058 JIT_NEXT;
1060 NEXT; 1059 NEXT;
1061 } 1060 }
1062 1061
1063 CASE (Bdup): 1062 CASE (Bdup):
1064 { 1063 {
1065 jit_value_t x;
1066 JIT_NEED_STACK; 1064 JIT_NEED_STACK;
1067 JIT_TOP (x); 1065 JIT_PUSH (JIT_TOP ());
1068 JIT_PUSH (x);
1069 JIT_NEXT; 1066 JIT_NEXT;
1070 NEXT; 1067 NEXT;
1071 } 1068 }
@@ -1089,11 +1086,11 @@ jit_byte_code__ (Lisp_Object byte_code)
1089 op -= Bvarbind; 1086 op -= Bvarbind;
1090 varbind: 1087 varbind:
1091 { 1088 {
1092 jit_value_t v1, v2, x;
1093 JIT_NEED_STACK; 1089 JIT_NEED_STACK;
1094 v1 = JIT_CONSTANT (jit_type_Lisp_Object, vectorp[op]); 1090 JIT_CALL_ARGS (specbind,
1095 JIT_POP (v2); 1091 JIT_CONSTANT (jit_type_Lisp_Object,
1096 JIT_CALL_ARGS (x, specbind, v1, v2); 1092 vectorp[op]),
1093 JIT_POP ());
1097 JIT_NEXT; 1094 JIT_NEXT;
1098 NEXT; 1095 NEXT;
1099 } 1096 }
@@ -1195,12 +1192,12 @@ jit_byte_code__ (Lisp_Object byte_code)
1195 } 1192 }
1196 CHECK_RANGE (op); 1193 CHECK_RANGE (op);
1197 JIT_NEED_STACK; 1194 JIT_NEED_STACK;
1198 JIT_POP (v2); 1195 v2 = JIT_POP ();
1199 if (insn == Bgotoifnil || insn == BRgotoifnil 1196 if (insn == Bgotoifnil || insn == BRgotoifnil
1200 || insn == Bgotoifnilelsepop || insn == BRgotoifnilelsepop) 1197 || insn == Bgotoifnilelsepop || insn == BRgotoifnilelsepop)
1201 JIT_CALL_ARGS (v3, native_ifnil, v2); 1198 v3 = JIT_CALL_ARGS (native_ifnil, v2);
1202 else 1199 else
1203 JIT_CALL_ARGS (v3, native_ifnonnil, v2); 1200 v3 = JIT_CALL_ARGS (native_ifnonnil, v2);
1204 if (insn == Bgotoifnilelsepop || insn == Bgotoifnonnilelsepop 1201 if (insn == Bgotoifnilelsepop || insn == Bgotoifnonnilelsepop
1205 || insn == BRgotoifnilelsepop || insn == BRgotoifnonnilelsepop) 1202 || insn == BRgotoifnilelsepop || insn == BRgotoifnonnilelsepop)
1206 JIT_PUSH (v2); 1203 JIT_PUSH (v2);
@@ -1228,10 +1225,8 @@ jit_byte_code__ (Lisp_Object byte_code)
1228 1225
1229 CASE (Breturn): 1226 CASE (Breturn):
1230 { 1227 {
1231 jit_value_t v;
1232 JIT_NEED_STACK; 1228 JIT_NEED_STACK;
1233 JIT_POP (v); 1229 jit_insn_return (ctxt.func, JIT_POP ());
1234 jit_insn_return (ctxt.func, v);
1235 NEXT; 1230 NEXT;
1236 } 1231 }
1237 1232
@@ -1245,9 +1240,8 @@ jit_byte_code__ (Lisp_Object byte_code)
1245 1240
1246 CASE (Bconstant2): 1241 CASE (Bconstant2):
1247 { 1242 {
1248 jit_value_t v = JIT_CONSTANT (jit_type_Lisp_Object, vectorp[FETCH2]);
1249 JIT_NEED_STACK; 1243 JIT_NEED_STACK;
1250 JIT_PUSH (v); 1244 JIT_PUSH (JIT_CONSTANT (jit_type_Lisp_Object, vectorp[FETCH2]));
1251 JIT_NEXT; 1245 JIT_NEXT;
1252 NEXT; 1246 NEXT;
1253 } 1247 }
@@ -1295,13 +1289,12 @@ jit_byte_code__ (Lisp_Object byte_code)
1295 type = CONDITION_CASE; 1289 type = CONDITION_CASE;
1296 pushhandler: 1290 pushhandler:
1297 { 1291 {
1298 jit_value_t tag, stackp, jmp, result, result2, typev; 1292 jit_value_t stackp, jmp, result, result2;
1299 int dest = FETCH2; 1293 int dest = FETCH2;
1300 JIT_NEED_STACK; 1294 JIT_NEED_STACK;
1301 JIT_POP (tag);
1302 stackp = jit_insn_address_of (ctxt.func, ctxt.stack); 1295 stackp = jit_insn_address_of (ctxt.func, ctxt.stack);
1303 typev = JIT_CONSTANT (jit_type_nint, type); 1296 jmp = JIT_CALL_ARGS (native_pushhandler1, stackp, JIT_POP (),
1304 JIT_CALL_ARGS (jmp, native_pushhandler1, stackp, tag, typev); 1297 JIT_CONSTANT (jit_type_nint, type));
1305 do { 1298 do {
1306 void *f; 1299 void *f;
1307 int n; 1300 int n;
@@ -1338,7 +1331,7 @@ jit_byte_code__ (Lisp_Object byte_code)
1338 { 1331 {
1339 jit_value_t handler; 1332 jit_value_t handler;
1340 JIT_NEED_STACK; 1333 JIT_NEED_STACK;
1341 JIT_POP (handler); 1334 handler = JIT_POP ();
1342 JIT_CALL (native_unwind_protect, &handler, 1); 1335 JIT_CALL (native_unwind_protect, &handler, 1);
1343 JIT_NEXT; 1336 JIT_NEXT;
1344 NEXT; 1337 NEXT;
@@ -1362,18 +1355,18 @@ jit_byte_code__ (Lisp_Object byte_code)
1362 CASE (Btemp_output_buffer_show): /* Obsolete since 24.1. */ 1355 CASE (Btemp_output_buffer_show): /* Obsolete since 24.1. */
1363 { 1356 {
1364 jit_type_t temp_output_buffer_show_sig; 1357 jit_type_t temp_output_buffer_show_sig;
1365 jit_value_t v1, v2, c, q, x; 1358 jit_value_t v1, v2, c, q;
1366 JIT_NEED_STACK; 1359 JIT_NEED_STACK;
1367 JIT_SIG (temp_output_buffer_show, 1360 JIT_SIG (temp_output_buffer_show,
1368 jit_type_void, 1361 jit_type_void,
1369 jit_type_Lisp_Object); 1362 jit_type_Lisp_Object);
1370 JIT_POP (v1); 1363 v1 = JIT_POP ();
1371 JIT_POP (v2); 1364 v2 = JIT_POP ();
1372 JIT_CALL (temp_output_buffer_show, &v2, 1); 1365 JIT_CALL (temp_output_buffer_show, &v2, 1);
1373 JIT_PUSH (v1); 1366 JIT_PUSH (v1);
1374 c = JIT_CONSTANT (jit_type_nuint, 1); 1367 c = JIT_CONSTANT (jit_type_nuint, 1);
1375 q = JIT_CONSTANT (jit_type_Lisp_Object, Qnil); 1368 q = JIT_CONSTANT (jit_type_Lisp_Object, Qnil);
1376 JIT_CALL_ARGS (x, native_unbind_to, c, q); 1369 JIT_CALL_ARGS (native_unbind_to, c, q);
1377 JIT_NEXT; 1370 JIT_NEXT;
1378 NEXT; 1371 NEXT;
1379 } 1372 }
@@ -1536,22 +1529,18 @@ jit_byte_code__ (Lisp_Object byte_code)
1536 1529
1537 CASE (Bsub1): 1530 CASE (Bsub1):
1538 { 1531 {
1539 jit_value_t v1, v2;
1540 JIT_NEED_STACK; 1532 JIT_NEED_STACK;
1541 JIT_POP (v1); 1533 JIT_PUSH (JIT_CALL_ARGS (native_add1, JIT_POP (),
1542 JIT_CALL_ARGS (v2, native_add1, v1, JIT_CONSTANT (jit_type_sys_bool, 0)); 1534 JIT_CONSTANT (jit_type_sys_bool, 0)));
1543 JIT_PUSH (v2);
1544 JIT_NEXT; 1535 JIT_NEXT;
1545 NEXT; 1536 NEXT;
1546 } 1537 }
1547 1538
1548 CASE (Badd1): 1539 CASE (Badd1):
1549 { 1540 {
1550 jit_value_t v1, v2;
1551 JIT_NEED_STACK; 1541 JIT_NEED_STACK;
1552 JIT_POP (v1); 1542 JIT_PUSH (JIT_CALL_ARGS (native_add1, JIT_POP (),
1553 JIT_CALL_ARGS (v2, native_add1, v1, JIT_CONSTANT (jit_type_sys_bool, 1)); 1543 JIT_CONSTANT (jit_type_sys_bool, 1)));
1554 JIT_PUSH (v2);
1555 JIT_NEXT; 1544 JIT_NEXT;
1556 NEXT; 1545 NEXT;
1557 } 1546 }
@@ -1568,7 +1557,7 @@ jit_byte_code__ (Lisp_Object byte_code)
1568 CASE (Bleq): 1557 CASE (Bleq):
1569 CASE (Bgeq): 1558 CASE (Bgeq):
1570 { 1559 {
1571 jit_value_t v1, v2, v3, c; 1560 jit_value_t v1, v2, c;
1572 enum Arith_Comparison v[] = 1561 enum Arith_Comparison v[] =
1573 { 1562 {
1574 ARITH_GRTR, 1563 ARITH_GRTR,
@@ -1578,10 +1567,9 @@ jit_byte_code__ (Lisp_Object byte_code)
1578 }; 1567 };
1579 JIT_NEED_STACK; 1568 JIT_NEED_STACK;
1580 c = JIT_CONSTANT (jit_type_nuint, v[op-Bgtr]); 1569 c = JIT_CONSTANT (jit_type_nuint, v[op-Bgtr]);
1581 JIT_POP (v2); 1570 v2 = JIT_POP ();
1582 JIT_POP (v1); 1571 v1 = JIT_POP ();
1583 JIT_CALL_ARGS (v3, arithcompare, v1, v2, c); 1572 JIT_PUSH (JIT_CALL_ARGS (arithcompare, v1, v2, c));
1584 JIT_PUSH (v3);
1585 JIT_NEXT; 1573 JIT_NEXT;
1586 NEXT; 1574 NEXT;
1587 } 1575 }
@@ -2029,7 +2017,7 @@ jit_byte_code__ (Lisp_Object byte_code)
2029 2017
2030 JIT_NEED_STACK; 2018 JIT_NEED_STACK;
2031 JIT_INC (ctxt.stack, -offs * sizeof (Lisp_Object)); 2019 JIT_INC (ctxt.stack, -offs * sizeof (Lisp_Object));
2032 JIT_TOP (v1); 2020 v1 = JIT_TOP ();
2033 JIT_INC (ctxt.stack, offs * sizeof (Lisp_Object)); 2021 JIT_INC (ctxt.stack, offs * sizeof (Lisp_Object));
2034 JIT_PUSH (v1); 2022 JIT_PUSH (v1);
2035 JIT_NEXT; 2023 JIT_NEXT;
@@ -2042,7 +2030,7 @@ jit_byte_code__ (Lisp_Object byte_code)
2042 jit_value_t v1; 2030 jit_value_t v1;
2043 int offs = (op == Bstack_set) ? FETCH : FETCH2; 2031 int offs = (op == Bstack_set) ? FETCH : FETCH2;
2044 JIT_NEED_STACK; 2032 JIT_NEED_STACK;
2045 JIT_TOP (v1); 2033 v1 = JIT_TOP ();
2046 if (offs != 0) 2034 if (offs != 0)
2047 JIT_INC (ctxt.stack, -(offs + 1) * sizeof (Lisp_Object)); 2035 JIT_INC (ctxt.stack, -(offs + 1) * sizeof (Lisp_Object));
2048 JIT_PUSH (v1); 2036 JIT_PUSH (v1);
@@ -2058,7 +2046,7 @@ jit_byte_code__ (Lisp_Object byte_code)
2058 { 2046 {
2059 jit_value_t v1; 2047 jit_value_t v1;
2060 op &= 0x7F; 2048 op &= 0x7F;
2061 JIT_TOP (v1); 2049 v1 = JIT_TOP ();
2062 JIT_INC (ctxt.stack, -(op + 1) * sizeof (Lisp_Object)); 2050 JIT_INC (ctxt.stack, -(op + 1) * sizeof (Lisp_Object));
2063 JIT_PUSH (v1); 2051 JIT_PUSH (v1);
2064 } 2052 }