| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # amd64 address-folding stress
- export function w $f0(l %a, l %b) {
- @start
- %c =l add %b, 2
- %d =l mul %c, 4
- %e =l add %a, %d
- %q =l loadw %e
- ret %q
- }
- export function w $f1(l %a, l %b) {
- @start
- %c =l add 1, %b
- %f =l add %c, 1
- %d =l mul %f, 4
- %e =l add %d, %a
- %q =l loadw %e
- ret %q
- }
- export function w $f2(l %a, l %b) {
- @start
- %l =l mul %b, 4
- %d =l add 8, %l
- %e =l add %a, %d
- %q =l loadw %e
- ret %q
- }
- # fixme: folding is not good here
- export function w $f3(l %a, l %b) {
- @start
- %l =l mul %b, 4
- %d =l add 4, %l
- %f =l add 4, %d
- %e =l add %a, %f
- %q =l loadw %e
- ret %q
- }
- export function w $f4(l %a, l %b) {
- @start
- %c =l add 1, %b
- %d =l mul %c, 4
- %e =l add 4, %d
- %f =l add %e, %a
- %q =l loadw %f
- ret %q
- }
- # >>> driver
- # int a[] = {1, 2, 3, 4};
- # typedef int loadf(int *, long long);
- # extern loadf f0, f1, f2, f3, f4;
- # loadf *fns[] = {&f0, &f1, &f2, &f3, &f4, 0};
- # int main() {
- # loadf **f;
- # int n;
- # for (n=1,f=fns; *f; f++,n++)
- # if ((*f)(a, 1) != 4) return n;
- # return 0;
- # }
- # <<<
|