diff options
| -rw-r--r-- | i386-asm.c | 2 | ||||
| -rw-r--r-- | tests/tcctest.c | 10 |
2 files changed, 11 insertions, 1 deletions
@@ -1605,8 +1605,10 @@ ST_FUNC void asm_gen_code(ASMOperand *operands, int nb_operands, SValue sv; sv = *op->vt; sv.r = (sv.r & ~VT_VALMASK) | VT_LOCAL; + sv.type.t = VT_PTR; load(out_reg, &sv); + sv = *op->vt; sv.r = (sv.r & ~VT_VALMASK) | out_reg; store(op->reg, &sv); } diff --git a/tests/tcctest.c b/tests/tcctest.c index 7bdffff..496de3a 100644 --- a/tests/tcctest.c +++ b/tests/tcctest.c @@ -2909,10 +2909,15 @@ char * get_asm_string (void) unsigned int set; +void fancy_copy (unsigned *in, unsigned *out) +{ + asm volatile ("" : "=r" (*out) : "0" (*in)); +} + void asm_test(void) { char buf[128]; - unsigned int val; + unsigned int val, val2; struct struct123 s1; struct struct1231 s2 = { (unsigned long)&s1 }; /* Hide the outer base_func, but check later that the inline @@ -2979,6 +2984,9 @@ void asm_test(void) printf("asmbool: failed\n"); #endif printf("asmstr: %s\n", get_asm_string()); + val = 43; + fancy_copy (&val, &val2); + printf ("fancycpy(%d)=%d\n", val, val2); return; label1: goto label2; |
