Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

__attribute__((interrupt)) trashes MMX registers #26785

Open
hjl-tools opened this issue Feb 1, 2016 · 0 comments
Open

__attribute__((interrupt)) trashes MMX registers #26785

hjl-tools opened this issue Feb 1, 2016 · 0 comments
Labels
backend:X86 bugzilla Issues migrated from bugzilla

Comments

@hjl-tools
Copy link
Contributor

Bugzilla Link 26411
Version trunk
OS All
CC @RKSimon

Extended Description

[hjl@gnu-6 interrupt-8]$ cat z.i
typedef short __v4hi attribute ((vector_size (8)));
typedef int __m64 attribute ((vector_size (8), may_alias));

extern __m64 y, x;

void
attribute((interrupt))
fn1 (void *frame)
{
x = (__m64) __builtin_ia32_packsswb ((__v4hi) x, (__v4hi) y);
}
[hjl@gnu-6 interrupt-8]$ make z.s
/export/build/gnu/llvm-clang-bootstrap/stage1/build-x86_64-linux/bin/clang -O2 -Wall -march=nehalem -S -o z.s z.i
[hjl@gnu-6 interrupt-8]$ cat z.s
.text
.file "z.i"
.globl fn1
.p2align 4, 0x90
.type fn1,@function
fn1: # @​fn1
.cfi_startproc

BB#0:

movq	x(%rip), %mm0
packsswb	y(%rip), %mm0
movq	%mm0, x(%rip)
iretq

.Lfunc_end0:
.size fn1, .Lfunc_end0-fn1
.cfi_endproc

.ident	"clang version 3.9.0 (http://llvm.org/git/clang.git 1f64ddbc4c5d1036b68ec896765a7535537ded85) (http://llvm.org/git/llvm.git 43b517fe4e0a181b1cf20f36fd9eb92f7b32946c)"
.section	".note.GNU-stack","",@progbits

[hjl@gnu-6 interrupt-8]$

Interrupt handler must preserve MMX and X87 states. It shouldn"t be
allowed to use MMX nor x87 registers.

@llvmbot llvmbot transferred this issue from llvm/llvm-bugzilla-archive Dec 10, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:X86 bugzilla Issues migrated from bugzilla
Projects
None yet
Development

No branches or pull requests

1 participant