case Bstack_ref3:
case Bstack_ref4:
case Bstack_ref5:
- {
- PUSH_LVAL (stack_base[(stack - stack_base) - (op - Bstack_ref) - 1]);
- break;
- }
+ PUSH_LVAL (stack_base[(stack - stack_base) - (op - Bstack_ref) - 1]);
+ break;
+
case Bstack_ref6:
- {
- PUSH_LVAL (stack_base[(stack - stack_base) - FETCH - 1]);
- break;
- }
+ PUSH_LVAL (stack_base[(stack - stack_base) - FETCH - 1]);
+ break;
+
case Bstack_ref7:
- {
- PUSH_LVAL (stack_base[(stack - stack_base) - FETCH2 - 1]);
- break;
- }
+ PUSH_LVAL (stack_base[(stack - stack_base) - FETCH2 - 1]);
+ break;
case Bvarref7:
op = FETCH2;
case Bstack_set2:
error ("Bstack_set2 not supported");
break;
+
case BdiscardN:
- error ("BdiscardN not supported");
+ op = FETCH;
+ if (op & 0x80)
+ {
+ op &= 0x7F;
+ POP1;
+ gcc_jit_block_add_assignment (comp.bblock->gcc_bb,
+ NULL,
+ *(stack - op - 1),
+ args[0]);
+ }
+
+ stack -= op;
break;
case Bswitch:
error ("Bswitch not supported");
a constant on the stack. */
goto fail;
break;
+
default:
case Bconstant:
{
(should (eq (comp-tests-numberp-f 'a) nil))
(should (eq (comp-tests-numberp-f 3.5) t)))
+(ert-deftest comp-tests-stack ()
+ "Test some stack operation."
+ (defun comp-tests-discardn-f (x)
+ ;; BdiscardN
+ (1+ (let ((a 1)
+ (_b)
+ (_c))
+ a)))
+
+ (byte-compile #'comp-tests-discardn-f)
+ (native-compile #'comp-tests-discardn-f)
+
+ (should (= (comp-tests-discardn-f 10) 2)))
+
(ert-deftest comp-tests-gc ()
"Try to do some longer computation to let the gc kick in."
(dotimes (_ 100000)