-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathINTRINS.ASM
149 lines (129 loc) · 2.12 KB
/
INTRINS.ASM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
; -----------------------------------------------------------
; Small C Compiler for TRDOS 386 (v2.0.9 and later)
; Erdogan Tan - 2024
; Beginning: 05/09/2024
; Last Update: 26/09/2024
; -----------------------------------------------------------
; Derived from 'intrins.asm' file of KolibriOS SCC source code
; 2024
;
; Small-C Run Time Library for Win NT
;
; Nasm version 17/Nov/98 H T Walheim
; Revised: 20/Nov/98 HTW [Bugs in switch]
;
_CCARGC:
;B+ Ellipses arguments ( ,...)
;cl - argument count
xor eax,eax
movzx eax,cl ; No sign-extension
retn
;E:.
;B+ Compare
__ult:
;B+ ???
cmp eax,ebx
ja short true
xor eax,eax
retn
;E:.
__ugt:
;B+ ???
cmp eax,ebx
jb short true
xor eax,eax
retn
;E:.
__ule:
;B+ ???
cmp eax,ebx
jae short true
xor eax,eax
retn
;E:.
__uge:
;B+ ???
cmp eax,ebx
jbe short true
xor eax,eax
retn
;E:.
__eq:
;B+ ???
cmp eax,ebx
je short true
xor eax,eax
retn
;E:.
__ne:
;B+ ???
cmp eax,ebx
jne short true
xor eax,eax
retn
;E:.
__lt:
;B+ ???
cmp eax,ebx
jg short true
xor eax,eax
retn
;E:.
__gt:
;B+ ???
cmp eax,ebx
jl short true
xor eax,eax
retn
;E:.
__le:
;B+ ???
cmp eax,ebx
jge short true
xor eax,eax
retn
;E:.
__ge:
;B+ ???
cmp eax,ebx
jle short true
xor eax,eax
retn
;E:.
;E:.
__lneg:
;B+ Logical Negate of Primary
or eax,eax
jnz short false
true:
mov eax,1
retn
false:
xor eax,eax
retn
;E:.
__switch:
;B+ Execute "switch" statement
;eax - switch value
;[esp] - pointer to switch table
; dd addr1,value1
; ...
; dd 0
; [jmp default]
; continuation
;
; Revised: 20/Nov/98 [JECXZ needed]
pop ebx
jmp short skip
back:
add ebx,8 ;next case-pair
skip:
mov ecx,[ebx] ;case-label location (adress)
jecxz default
cmp eax,[ebx+4] ;test case-value
jnz short back
jmp ecx ;match -- jump to case
default:
add ebx,4
jmp ebx ;jump to default/continuation
;E:.