- assert(v->code == jit_code_arg);
- jit_inc_synth_wp(putargr, u, v);
- if (jit_arg_reg_p(v->u.w))
- jit_movr(JIT_RA0 - v->u.w, u);
- else
- jit_stxi(v->u.w, JIT_FP, u);
+ assert_putarg_type(code, v->code);
+ jit_code_inc_synth_wp(code, u, v);
+ if (jit_arg_reg_p(v->u.w)) {
+ jit_int32_t regno = JIT_RA0 - v->u.w;
+#if PACKED_STACK
+ switch (code) {
+ case jit_code_putargr_c: jit_extr_c(regno, u); break;
+ case jit_code_putargr_uc: jit_extr_uc(regno, u); break;
+ case jit_code_putargr_s: jit_extr_s(regno, u); break;
+ case jit_code_putargr_us: jit_extr_us(regno, u); break;
+# if __WORDISZE == 32
+ case jit_code_putargr_i: jit_movr(regno, u); break;
+# else
+ case jit_code_putargr_i: jit_extr_i(regno, u); break;
+ case jit_code_putargr_ui: jit_extr_ui(regno, u); break;
+ case jit_code_putargr_l: jit_movr(regno, u); break;
+# endif
+ default: abort(); break;
+ }
+#else
+ jit_movr(regno, u);
+#endif
+ }
+ else {
+ jit_node_t *node;
+#if PACKED_STACK
+ switch (code) {
+ case jit_code_putargr_c: case jit_code_putargr_uc:
+ node = jit_stxi_c(v->u.w, JIT_FP, u); break;
+ case jit_code_putargr_s: case jit_code_putargr_us:
+ node = jit_stxi_s(v->u.w, JIT_FP, u); break;
+# if __WORDSIZE == 32
+ case jit_code_putargr_i:
+ node = jit_stxi(v->u.w, JIT_FP, u); break;
+# else
+ case jit_code_putargr_i: case jit_code_putargr_ui:
+ node = jit_stxi_i(v->u.w, JIT_FP, u); break;
+ case jit_code_putargr_l:
+ node = jit_stxi(v->u.w, JIT_FP, u); break;
+# endif
+ default: abort(); break;
+ }
+#else
+ node = jit_stxi(v->u.w, JIT_FP, u);
+#endif
+ jit_link_alist(node);
+ }