Skip to content

__attribute__((interrupt)) trashes MMX registers #26785

@hjl-tools

Description

@hjl-tools
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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions