diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/bitfield-compound-assign.c | 7 | ||||
-rw-r--r-- | tests/bitfield-compound-assign.qbe | 21 |
2 files changed, 28 insertions, 0 deletions
diff --git a/tests/bitfield-compound-assign.c b/tests/bitfield-compound-assign.c new file mode 100644 index 0000000..5ca42e4 --- /dev/null +++ b/tests/bitfield-compound-assign.c @@ -0,0 +1,7 @@ +struct { + int : 4, x : 9, : 3; +} s; + +void f(void) { + s.x += 3; +} diff --git a/tests/bitfield-compound-assign.qbe b/tests/bitfield-compound-assign.qbe new file mode 100644 index 0000000..829f5f6 --- /dev/null +++ b/tests/bitfield-compound-assign.qbe @@ -0,0 +1,21 @@ +export +function $f() { +@start.1 +@body.2 + %.1 =l copy $s + %.2 =l mul 0, 1 + %.3 =l add %.1, %.2 + %.4 =l copy %.3 + %.5 =w loadsw %.4 + %.6 =w shl %.5, 19 + %.7 =w sar %.6, 23 + %.8 =w add %.7, 3 + %.9 =w loaduw %.4 + %.10 =w and %.9, 18446744073709543439 + %.11 =w shl %.8, 4 + %.12 =w and %.11, 8176 + %.13 =w or %.10, %.12 + storew %.13, %.4 + ret +} +export data $s = align 4 { z 4 } |