[PATCH] D12498: X86: add an interrupt calling convention
Amjad Aboud via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 18 07:46:45 PST 2015
aaboud added a subscriber: aaboud.
aaboud added a comment.
According to the final proposal by H.J.
> #ifdef __x86_64__
> typedef unsigned long long int uword_t;
> #else
> typedef unsigned int uword_t;
> #endif
>
> struct interrupt_frame
> {
>
> uword_t ip;
> uword_t cs;
> uword_t flags;
> uword_t sp;
> uword_t ss;
>
> };
>
> __attribute__ ((interrupt))
> void
> f (struct interrupt_frame *frame)
> {
> ...
> }
the frame parameter is passed in C as a pointer argument.
However, in the assembly it should be passed by value on the stack rather than a pointer on the stack.
Do we assume that this will be handled by the clang-FE ?
================
Comment at: lib/Target/X86/X86CallingConv.td:711
@@ -710,1 +710,3 @@
+def CC_X86_Intr : CallingConv<[
+ // Error codes aren't necessarily 32 bits wide, but fill a 32-bit slot.
----------------
I think we need to define argument convention for x86-32 and another for x86-64.
X86-32: the arguments need to have size 4 and alignment 4
X86-64: the arguments need to have size 8 and alignment 8
Also, why do we need to promote types to i32? Do we expect to have smaller types? Should not that be considered as illegal interrupt?
Repository:
rL LLVM
http://reviews.llvm.org/D12498
More information about the llvm-commits
mailing list