summaryrefslogtreecommitdiffstats
path: root/xorg/server/module/amd64/cpuid_amd64.asm
diff options
context:
space:
mode:
Diffstat (limited to 'xorg/server/module/amd64/cpuid_amd64.asm')
-rw-r--r--xorg/server/module/amd64/cpuid_amd64.asm41
1 files changed, 41 insertions, 0 deletions
diff --git a/xorg/server/module/amd64/cpuid_amd64.asm b/xorg/server/module/amd64/cpuid_amd64.asm
new file mode 100644
index 00000000..b97937ad
--- /dev/null
+++ b/xorg/server/module/amd64/cpuid_amd64.asm
@@ -0,0 +1,41 @@
+
+SECTION .text
+
+%macro PROC 1
+ align 16
+ global %1
+ %1:
+%endmacro
+
+;The first six integer or pointer arguments are passed in registers
+;RDI, RSI, RDX, RCX, R8, and R9
+
+;int
+;cpuid_amd64(int eax_in, int ecx_in, int *eax, int *ebx, int *ecx, int *edx)
+
+PROC cpuid_amd64
+ ; save registers
+ push rbx
+
+ push rdx
+ push rcx
+ push r8
+ push r9
+
+ mov rax, rdi
+ mov rcx, rsi
+ cpuid
+ pop rdi
+ mov [rdi], edx
+ pop rdi
+ mov [rdi], ecx
+ pop rdi
+ mov [rdi], ebx
+ pop rdi
+ mov [rdi], eax
+ mov eax, 0
+ ; restore registers
+ pop rbx
+ ret;
+ align 16
+