diff options
author | Andi Kleen <ak@suse.de> | 2006-01-12 00:45:18 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-12 06:04:57 +0300 |
commit | 6e54d95f73bbc79171802a1983e0c3835676db88 (patch) | |
tree | 83b5ff3175f0b3fe445912cfaa98318d8b3ee24a /include/asm-x86_64/system.h | |
parent | 737c5c3bde5641af9c24e3a60366674af72a43ef (diff) | |
download | linux-6e54d95f73bbc79171802a1983e0c3835676db88.tar.xz |
[PATCH] x86_64: Support alternative() with a output argument.
Needed for follow on patches
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/asm-x86_64/system.h')
-rw-r--r-- | include/asm-x86_64/system.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h index a3bca7552e14..80272190570e 100644 --- a/include/asm-x86_64/system.h +++ b/include/asm-x86_64/system.h @@ -137,6 +137,21 @@ struct alt_instr { "663:\n\t" newinstr "\n664:\n" /* replacement */ \ ".previous" :: "i" (feature), ##input) +/* Like alternative_input, but with a single output argument */ +#define alternative_io(oldinstr, newinstr, feature, output, input...) \ + asm volatile ("661:\n\t" oldinstr "\n662:\n" \ + ".section .altinstructions,\"a\"\n" \ + " .align 8\n" \ + " .quad 661b\n" /* label */ \ + " .quad 663f\n" /* new instruction */ \ + " .byte %c[feat]\n" /* feature bit */ \ + " .byte 662b-661b\n" /* sourcelen */ \ + " .byte 664f-663f\n" /* replacementlen */ \ + ".previous\n" \ + ".section .altinstr_replacement,\"ax\"\n" \ + "663:\n\t" newinstr "\n664:\n" /* replacement */ \ + ".previous" : output : [feat] "i" (feature), ##input) + /* * Clear and set 'TS' bit respectively */ |