summaryrefslogtreecommitdiff
path: root/apps/plugins/sdl/progs/quake/dosasm.S
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/sdl/progs/quake/dosasm.S')
-rw-r--r--apps/plugins/sdl/progs/quake/dosasm.S77
1 files changed, 77 insertions, 0 deletions
diff --git a/apps/plugins/sdl/progs/quake/dosasm.S b/apps/plugins/sdl/progs/quake/dosasm.S
new file mode 100644
index 0000000000..2633be9617
--- /dev/null
+++ b/apps/plugins/sdl/progs/quake/dosasm.S
@@ -0,0 +1,77 @@
1#include "asm_i386.h"
2
3.data
4fpenv: .long 0, 0, 0, 0, 0, 0, 0, 0
5
6.text
7.globl C(StartMSRInterval)
8C(StartMSRInterval):
9 movl $0x11,%ecx // read the CESR
10 .byte 0x0F
11 .byte 0x32 // RDMSR
12
13 andl $0xFE3FFE3F,%eax // stop both counters
14 .byte 0x0F
15 .byte 0x30 // WRMSR
16
17 movl 4(%esp),%eax // point counter 0 to desired event, with counters
18 andl $0x3F,%eax // still stopped
19 movl $0x11,%ecx
20 .byte 0x0F
21 .byte 0x30 // WRMSR
22
23 movl $0x12,%ecx // set counter 0 to the value 0
24 subl %eax,%eax
25 subl %edx,%edx
26 .byte 0x0F
27 .byte 0x30 // WRMSR
28
29 movl 4(%esp),%eax // restart counter 0 with selected event
30 andl $0x3F,%eax
31 subl %edx,%edx
32 orl $0xC0,%eax
33 movl $0x11,%ecx // control and event select
34 .byte 0x0F
35 .byte 0x30 // WRMSR
36
37 ret
38
39.globl C(EndMSRInterval)
40C(EndMSRInterval):
41 movl $0x12,%ecx // counter 0
42 .byte 0x0F
43 .byte 0x32 // RDMSR
44
45 ret // lower 32 bits of count in %eax
46
47#if 0
48 .data
49Lxxx: .long 0
50
51 .text
52
53.globl C(setstackcheck)
54C(setstackcheck):
55
56 movl %esp,%eax
57 subl $0x38000,%eax
58 movl $0x5A5A5A5A,(%eax)
59 movl %eax,Lxxx
60
61 ret
62
63
64.globl C(dostackcheck)
65C(dostackcheck):
66
67 movl Lxxx,%edx
68 movl $0,%eax
69
70 cmpl $0x5A5A5A5A,(%edx)
71 jz qqq
72 incl %eax
73qqq:
74
75 ret
76#endif
77