diff options
| author | Nickolas Lloyd | 2016-12-27 13:27:18 -0500 |
|---|---|---|
| committer | Nickolas Lloyd | 2016-12-27 14:21:07 -0500 |
| commit | 86357df0e06d9fc4125eb668337657d27148cdce (patch) | |
| tree | 582c97bc070b598efe9c11d2dcbf6e89ae4b016c /src/bytecode-jit.c | |
| parent | 68c56c064e8c72ec924583e39ce6ab5ecf0f31c5 (diff) | |
| download | emacs-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.c | 90 |
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 | } |