diff options
| author | Andrea Corallo | 2019-07-21 12:11:45 +0200 |
|---|---|---|
| committer | Andrea Corallo | 2020-01-01 11:33:56 +0100 |
| commit | 976357769fe33e36afb37d5cd663587f46e88d0e (patch) | |
| tree | 13beed5682127eac738abd665e19a2024168335d /src | |
| parent | 759a15d446b7f728d2d146cb1bfd6d722df9e998 (diff) | |
| download | emacs-976357769fe33e36afb37d5cd663587f46e88d0e.tar.gz emacs-976357769fe33e36afb37d5cd663587f46e88d0e.zip | |
rework arg parsing on the C side
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/comp.c b/src/comp.c index 152a0e61808..edc35cf8b0e 100644 --- a/src/comp.c +++ b/src/comp.c | |||
| @@ -1055,7 +1055,8 @@ static void | |||
| 1055 | emit_limple_inst (Lisp_Object inst) | 1055 | emit_limple_inst (Lisp_Object inst) |
| 1056 | { | 1056 | { |
| 1057 | Lisp_Object op = XCAR (inst); | 1057 | Lisp_Object op = XCAR (inst); |
| 1058 | Lisp_Object arg0 = SECOND (inst); | 1058 | Lisp_Object args = XCDR (inst); |
| 1059 | Lisp_Object arg0 = XCAR (args); | ||
| 1059 | gcc_jit_rvalue *res; | 1060 | gcc_jit_rvalue *res; |
| 1060 | 1061 | ||
| 1061 | if (EQ (op, Qblock)) | 1062 | if (EQ (op, Qblock)) |
| @@ -1071,10 +1072,10 @@ emit_limple_inst (Lisp_Object inst) | |||
| 1071 | } | 1072 | } |
| 1072 | else if (EQ (op, Qcond_jump)) | 1073 | else if (EQ (op, Qcond_jump)) |
| 1073 | { | 1074 | { |
| 1074 | /* Conditional branch. */ | 1075 | /* Conditional branch. */ |
| 1075 | gcc_jit_rvalue *test = emit_mvar_val (arg0); | 1076 | gcc_jit_rvalue *test = emit_mvar_val (arg0); |
| 1076 | gcc_jit_block *target1 = retrive_block (THIRD (inst)); | 1077 | gcc_jit_block *target1 = retrive_block (SECOND (args)); |
| 1077 | gcc_jit_block *target2 = retrive_block (FORTH (inst)); | 1078 | gcc_jit_block *target2 = retrive_block (THIRD (args)); |
| 1078 | 1079 | ||
| 1079 | emit_cond_jump (emit_NILP (test), target2, target1); | 1080 | emit_cond_jump (emit_NILP (test), target2, target1); |
| 1080 | } | 1081 | } |
| @@ -1087,7 +1088,7 @@ emit_limple_inst (Lisp_Object inst) | |||
| 1087 | else if (EQ (op, Qset)) | 1088 | else if (EQ (op, Qset)) |
| 1088 | { | 1089 | { |
| 1089 | EMACS_UINT slot_n = XFIXNUM (FUNCALL1 (comp-mvar-slot, arg0)); | 1090 | EMACS_UINT slot_n = XFIXNUM (FUNCALL1 (comp-mvar-slot, arg0)); |
| 1090 | Lisp_Object arg1 = THIRD (inst); | 1091 | Lisp_Object arg1 = SECOND (args); |
| 1091 | 1092 | ||
| 1092 | if (EQ (Ftype_of (arg1), Qcomp_mvar)) | 1093 | if (EQ (Ftype_of (arg1), Qcomp_mvar)) |
| 1093 | res = emit_mvar_val (arg1); | 1094 | res = emit_mvar_val (arg1); |
| @@ -1107,7 +1108,7 @@ emit_limple_inst (Lisp_Object inst) | |||
| 1107 | { | 1108 | { |
| 1108 | /* Ex: (=par #s(comp-mvar 2 0 nil nil nil) 0). */ | 1109 | /* Ex: (=par #s(comp-mvar 2 0 nil nil nil) 0). */ |
| 1109 | EMACS_UINT slot_n = XFIXNUM (FUNCALL1 (comp-mvar-slot, arg0)); | 1110 | EMACS_UINT slot_n = XFIXNUM (FUNCALL1 (comp-mvar-slot, arg0)); |
| 1110 | EMACS_UINT param_n = XFIXNUM (THIRD (inst)); | 1111 | EMACS_UINT param_n = XFIXNUM (SECOND (args)); |
| 1111 | gcc_jit_rvalue *param = | 1112 | gcc_jit_rvalue *param = |
| 1112 | gcc_jit_param_as_rvalue (gcc_jit_function_get_param (comp.func, | 1113 | gcc_jit_param_as_rvalue (gcc_jit_function_get_param (comp.func, |
| 1113 | param_n)); | 1114 | param_n)); |
| @@ -1119,7 +1120,7 @@ emit_limple_inst (Lisp_Object inst) | |||
| 1119 | else if (EQ (op, Qsetimm)) | 1120 | else if (EQ (op, Qsetimm)) |
| 1120 | { | 1121 | { |
| 1121 | /* EX: (=imm #s(comp-mvar 9 1 t 3 nil) 3). */ | 1122 | /* EX: (=imm #s(comp-mvar 9 1 t 3 nil) 3). */ |
| 1122 | Lisp_Object arg1 = THIRD (inst); | 1123 | Lisp_Object arg1 = SECOND (args); |
| 1123 | EMACS_UINT slot_n = XFIXNUM (FUNCALL1 (comp-mvar-slot, arg0)); | 1124 | EMACS_UINT slot_n = XFIXNUM (FUNCALL1 (comp-mvar-slot, arg0)); |
| 1124 | gcc_jit_block_add_assignment (comp.block, | 1125 | gcc_jit_block_add_assignment (comp.block, |
| 1125 | NULL, | 1126 | NULL, |