Last active
October 30, 2019 14:13
-
-
Save gnzlbg/68af7c4872ef96c7df160488d62ce567 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Consider this code: | |
struct foo {}; | |
int id_foo(struct foo bar, int x) { | |
return x; | |
} | |
int id(int x) { | |
return x; | |
} | |
This link shows the assembly generated for MSP430, MIPS64el, PPC32 and PPC64 (https://godbolt.org/z/yOCJ-z), reproduced here for completeness: | |
;; MIPS64: | |
id_foo: | |
j $31 | |
move $2,$4 | |
id: | |
j $31 | |
move $2,$4 | |
;; MSP430: | |
id_foo: | |
MOV.W R13, R12 | |
RET | |
id: | |
RET | |
;; POWERPC64LE | |
id_foo: | |
blr | |
.long 0 | |
.byte 0,0,0,0,0,0,0,0 | |
id: | |
blr | |
.long 0 | |
.byte 0,0,0,0,0,0,0,0 | |
;; POWERPC | |
id_foo: | |
mr 3,4 | |
blr | |
id: | |
blr | |
Notice how MSP430 and POWERPC passes ZSTs in the calling convention, while MIPS64 and POWERPC64LE ignore them. | |
I can't find an ABI specification document for the MSP430 and POWERPC targets, so I was wondering whether this is | |
a bug in the GCC implementation of the ABI for these targets. And if not, then why do these targets care | |
about passing zero-sized types in their calling convention? Is this documented anywhere? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment