Sylvestre Ledru wrote: > Good question... I can try to do that. I was just trying to match the > current upstream behavior first. >
Ok did this : ************ int foo(i) { return i*3; } ************ Compiled this with : gcc -O3 foo.c -S -o foo.s which yields : ************ .file "foo.c" .text .align 4 .globl foo .type foo, @function foo: .LFB0: .cfi_startproc lr %r1,%r2 sll %r1,1 ar %r2,%r1 br %r14 .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (Debian 4.4.2-5) 4.4.2" .section .note.GNU-stack,"",@progbits ************ (apparently, GCC optimizer says that 3x=2x+x is the best way..)That being said, and with the s390 ABI giving parm 1 in R2, returning R2, R1 being expandable and R14 being the return address there are several possibilities...
lr %r1,%r2 ar %r2,%r1 ar %r2,%r1 br %r14 would probably also work (3x=x+x+x) The 64 bit version (s390x) - with gcc -m64 adds a 32 bit truncation.. lr %r1,%r2 sll %r1,1 ar %r1,%r2 lgfr %r2,%r1 br %r14You will probably also need to tweak your atlas_asm.h - and add a case for ATL_GAS_S390 - I don't know what it does, but if it is some function decoration, it *may* be ABI dependent (not sure.. but checking wouldn't hurt).
--Ivan
smime.p7s
Description: S/MIME Cryptographic Signature