comparison src/hermes/x86_main.asm @ 0:74212992fb08

Initial revision
author Sam Lantinga <slouken@lokigames.com>
date Thu, 26 Apr 2001 16:45:43 +0000
parents
children da33b7e6d181
comparison
equal deleted inserted replaced
-1:000000000000 0:74212992fb08
1 ;
2 ; x86 format converters for HERMES
3 ; Some routines Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at)
4 ; This source code is licensed under the GNU LGPL
5 ;
6 ; Please refer to the file COPYING.LIB contained in the distribution for
7 ; licensing conditions
8 ;
9 ; Most routines are (c) Glenn Fiedler (ptc@gaffer.org), used with permission
10 ;
11
12 BITS 32
13
14 GLOBAL _ConvertX86
15 GLOBAL _x86return
16
17 GLOBAL _Hermes_X86_CPU
18
19
20 SECTION .data
21
22 cpu_flags dd 0
23
24
25 SECTION .text
26
27 ;; _ConvertX86:
28 ;; [ESP+8] ConverterInfo*
29 ;; --------------------------------------------------------------------------
30 ;; ConverterInfo (ebp+..)
31 ;; 0: void *s_pixels
32 ;; 4: int s_width
33 ;; 8: int s_height
34 ;; 12: int s_add
35 ;; 16: void *d_pixels
36 ;; 20: int d_width
37 ;; 24: int d_height
38 ;; 28: int d_add
39 ;; 32: void (*converter_function)()
40 ;; 36: int32 *lookup
41
42 _ConvertX86:
43 push ebp
44 mov ebp,esp
45
46 ; Save the registers used by the blitters, necessary for optimized code
47 pusha
48
49 mov eax,[ebp+8]
50
51 cmp dword [eax+4],BYTE 0
52 je endconvert
53
54 mov ebp,eax
55
56 mov esi,[ebp+0]
57 mov edi,[ebp+16]
58
59 y_loop:
60 mov ecx,[ebp+4]
61
62 jmp [ebp+32]
63
64 _x86return:
65 add esi,[ebp+12]
66 add edi,[ebp+28]
67
68 dec dword [ebp+8]
69 jnz y_loop
70
71 ; Restore the registers used by the blitters, necessary for optimized code
72 popa
73
74 pop ebp
75
76 endconvert:
77 ret
78
79
80
81 ;; Hermes_X86_CPU returns the CPUID flags in eax
82
83 _Hermes_X86_CPU:
84 pushfd
85 pop eax
86
87 mov ecx,eax
88
89 xor eax,040000h
90 push eax
91
92 popfd
93 pushfd
94
95 pop eax
96 xor eax,ecx
97 jz .L1 ; Processor is 386
98
99 push ecx
100 popfd
101
102 mov eax,ecx
103 xor eax,200000h
104
105 push eax
106 popfd
107 pushfd
108
109 pop eax
110 xor eax,ecx
111 je .L1
112
113 pusha
114
115 mov eax,1
116 cpuid
117
118 mov [cpu_flags],edx
119
120 popa
121
122 mov eax,[cpu_flags]
123
124 .L1:
125 ret