diff options
Diffstat (limited to 'apps/plugins/sdl/progs/quake/dosasm.S')
-rw-r--r-- | apps/plugins/sdl/progs/quake/dosasm.S | 77 |
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 | ||
4 | fpenv: .long 0, 0, 0, 0, 0, 0, 0, 0 | ||
5 | |||
6 | .text | ||
7 | .globl C(StartMSRInterval) | ||
8 | C(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) | ||
40 | C(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 | ||
49 | Lxxx: .long 0 | ||
50 | |||
51 | .text | ||
52 | |||
53 | .globl C(setstackcheck) | ||
54 | C(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) | ||
65 | C(dostackcheck): | ||
66 | |||
67 | movl Lxxx,%edx | ||
68 | movl $0,%eax | ||
69 | |||
70 | cmpl $0x5A5A5A5A,(%edx) | ||
71 | jz qqq | ||
72 | incl %eax | ||
73 | qqq: | ||
74 | |||
75 | ret | ||
76 | #endif | ||
77 | |||