optimize, clean code

git-svn-id: svn://kolibrios.org@8063 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA
2020-09-16 06:59:01 +00:00
parent 185996ac6b
commit 51fcac25ee
6 changed files with 514 additions and 826 deletions

View File

@@ -1,25 +1,14 @@
; glVertex
align 4
proc glVertex4f uses eax, x:dword, y:dword, z:dword, w:dword
locals
p rd 5
endl
mov dword[p],OP_Vertex
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[z]
mov dword[p+12],eax
mov eax,[w]
mov dword[p+16],eax
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
glVertex4f: ;x, y, z, w
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Vertex
stdcall gl_add_op,eax
ret
endp
pop eax
ret 20 ;=sizeof(dd)*5
align 4
proc glVertex2f, x:dword, y:dword
@@ -57,23 +46,14 @@ endp
; glNormal
align 4
proc glNormal3f uses eax, x:dword, y:dword, z:dword
locals
p rd 4
endl
mov dword[p],OP_Normal
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[z]
mov dword[p+12],eax
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
glNormal3f: ;x, y, z
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Normal
stdcall gl_add_op,eax
ret
endp
pop eax
ret 16 ;=sizeof(dd)*4
align 4
proc glNormal3fv uses eax, v:dword
@@ -99,8 +79,7 @@ endl
mov eax,[a]
mov dword[p+16],eax
; direct convertion to integer to go faster if no shading
mov eax,ebp
sub eax,12 ;ebp-12 = &p[5]
lea eax,[ebp-12] ;ebp-12 = &p[5]
push eax
add eax,4 ;ebp-8 = &p[6]
push eax
@@ -108,8 +87,7 @@ endl
push eax
stdcall RGBFtoRGBI,[r],[g],[b] ;call: r,g,b,&p[7],&p[6],&p[5]
mov eax,ebp
sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall gl_add_op,eax
ret
endp
@@ -168,25 +146,14 @@ endp
; TexCoord
align 4
proc glTexCoord4f uses eax, s:dword, t:dword, r:dword, q:dword
locals
p rd 5
endl
mov dword[p],OP_TexCoord
mov eax,[s]
mov dword[p+4],eax
mov eax,[t]
mov dword[p+8],eax
mov eax,[r]
mov dword[p+12],eax
mov eax,[q]
mov dword[p+16],eax
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
glTexCoord4f: ;s, t, r, q
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_TexCoord
stdcall gl_add_op,eax
ret
endp
pop eax
ret 20 ;=sizeof(dd)*5
align 4
proc glTexCoord2f, s:dword, t:dword
@@ -202,59 +169,40 @@ proc glTexCoord2fv uses eax, v:dword
endp
align 4
proc glEdgeFlag uses eax, flag:dword
locals
p rd 2
endl
mov dword[p],OP_EdgeFlag
mov eax,[flag]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glEdgeFlag: ;flag
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_EdgeFlag
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
; misc
align 4
proc glShadeModel uses eax, mode:dword
locals
p rd 2
endl
glShadeModel: ;mode
; assert(mode == GL_FLAT || mode == GL_SMOOTH);
mov dword[p],OP_ShadeModel
mov eax,[mode]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_ShadeModel
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
align 4
proc glCullFace uses eax, mode:dword
locals
p rd 2
endl
glCullFace: ;mode
; assert(mode == GL_BACK ||
; mode == GL_FRONT ||
; mode == GL_FRONT_AND_BACK);
mov dword[p],OP_CullFace
mov eax,[mode]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_CullFace
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
align 4
proc glFrontFace uses eax, mode:dword
@@ -272,34 +220,24 @@ endl
@@:
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
lea eax,[ebp-8] ;=sizeof(dd)*2
stdcall gl_add_op,eax
ret
endp
align 4
proc glPolygonMode uses eax, face:dword, mode:dword
locals
p rd 3
endl
glPolygonMode: ;face, mode
; assert(face == GL_BACK ||
; face == GL_FRONT ||
; face == GL_FRONT_AND_BACK);
; assert(mode == GL_POINT || mode == GL_LINE || mode==GL_FILL);
mov dword[p],OP_PolygonMode
mov eax,[face]
mov dword[p+4],eax
mov eax,[mode]
mov dword[p+8],eax
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_PolygonMode
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
; glEnable / glDisable
@@ -313,8 +251,7 @@ endl
mov dword[p+4],eax
mov dword[p+8],1
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
lea eax,[ebp-12] ;=sizeof(dd)*3
stdcall gl_add_op,eax
ret
endp
@@ -329,8 +266,7 @@ endl
mov dword[p+4],eax
mov dword[p+8],0
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
lea eax,[ebp-12] ;=sizeof(dd)*3
stdcall gl_add_op,eax
ret
endp
@@ -338,49 +274,31 @@ endp
; glBegin / glEnd
align 4
proc glBegin uses eax, mode:dword
locals
p rd 2
endl
mov dword[p],OP_Begin
mov eax,[mode]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glBegin: ;mode
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Begin
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
align 4
proc glEnd uses eax
locals
p dd ?
endl
mov dword[p],OP_End
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glEnd:
stdcall gl_add_op,op_End
ret
endp
; matrix
align 4
proc glMatrixMode uses eax, mode:dword
locals
p rd 2
endl
mov dword[p],OP_MatrixMode
mov eax,[mode]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glMatrixMode: ;mode
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_MatrixMode
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
align 4
proc glLoadMatrixf uses ecx edi esi, m:dword
@@ -394,24 +312,15 @@ endl
sub edi,64 ;=sizeof(M4)
rep movsd
mov ecx,ebp
sub ecx,68 ;=sizeof(dd)*17
lea ecx,[ebp-68] ;=sizeof(dd)*17
stdcall gl_add_op,ecx
ret
endp
align 4
proc glLoadIdentity uses eax
locals
p dd ?
endl
mov dword[p],OP_LoadIdentity
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glLoadIdentity:
stdcall gl_add_op,op_LoadIdentity
ret
endp
align 4
proc glMultMatrixf uses ecx edi esi, m:dword
@@ -425,117 +334,60 @@ endl
sub edi,64 ;=sizeof(M4)
rep movsd
mov ecx,ebp
sub ecx,68 ;=sizeof(dd)*17
lea ecx,[ebp-68] ;=sizeof(dd)*17
stdcall gl_add_op,ecx
ret
endp
align 4
proc glPushMatrix uses eax
locals
p dd ?
endl
mov dword[p],OP_PushMatrix
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glPushMatrix:
stdcall gl_add_op,op_PushMatrix
ret
endp
align 4
proc glPopMatrix uses eax
locals
p dd ?
endl
mov dword[p],OP_PopMatrix
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glPopMatrix:
stdcall gl_add_op,op_PopMatrix
ret
endp
align 4
proc glRotatef uses eax, angle:dword, x:dword, y:dword, z:dword
locals
p rd 5
endl
mov dword[p],OP_Rotate
mov eax,[angle]
mov dword[p+4],eax
mov eax,[x]
mov dword[p+8],eax
mov eax,[y]
mov dword[p+12],eax
mov eax,[z]
mov dword[p+16],eax
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
glRotatef: ;angle, x, y, z
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Rotate
stdcall gl_add_op,eax
ret
endp
pop eax
ret 20 ;=sizeof(dd)*5
align 4
proc glTranslatef uses eax, x:dword, y:dword, z:dword
locals
p rd 4
endl
mov dword[p],OP_Translate
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[z]
mov dword[p+12],eax
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
glTranslatef: ;x, y, z
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Translate
stdcall gl_add_op,eax
ret
endp
pop eax
ret 16 ;=sizeof(dd)*4
align 4
proc glScalef uses eax, x:dword, y:dword, z:dword
locals
p rd 4
endl
mov dword[p],OP_Scale
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[z]
mov dword[p+12],eax
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
glScalef: ;x, y, z
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Scale
stdcall gl_add_op,eax
ret
endp
pop eax
ret 16 ;=sizeof(dd)*4
align 4
proc glViewport uses eax, x:dword, y:dword, width:dword, heigh:dword
locals
p rd 5
endl
mov dword[p],OP_Viewport
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[width]
mov dword[p+12],eax
mov eax,[heigh]
mov dword[p+16],eax
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
glViewport: ;x, y, width, heigh
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Viewport
stdcall gl_add_op,eax
ret
endp
pop eax
ret 20 ;=sizeof(dd)*5
align 4
proc glFrustum uses eax, left:qword, right:qword, bottom:qword, top:qword,\
@@ -557,8 +409,7 @@ endl
fld qword[farv]
fstp dword[p+24]
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
@@ -621,8 +472,7 @@ endl
mov dword[p+24],0.0
@@:
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
@@ -643,28 +493,20 @@ endl
mov dword[p+20],0.0
mov dword[p+24],0.0
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
align 4
proc glColorMaterial uses eax, mode:dword, type:dword
locals
p rd 3
endl
mov dword[p],OP_ColorMaterial
mov eax,[mode]
mov dword[p+4],eax
mov eax,[type]
mov dword[p+8],eax
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glColorMaterial: ;mode, type
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_ColorMaterial
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
align 4
proc glLightfv uses eax ecx, light:dword, type:dword, v:dword
@@ -688,8 +530,7 @@ endl
mov ecx,[eax+12]
mov dword[p+24],ecx
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
@@ -710,8 +551,7 @@ endl
mov dword[p+20],0.0
mov dword[p+24],0.0
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
@@ -731,8 +571,7 @@ endl
mov dword[p+16],0.0
mov dword[p+20],0.0
mov eax,ebp
sub eax,24 ;=sizeof(dd)*6
lea eax,[ebp-24] ;=sizeof(dd)*6
stdcall gl_add_op,eax
ret
endp
@@ -755,8 +594,7 @@ endl
mov ecx,[eax+12]
mov dword[p+20],ecx
mov eax,ebp
sub eax,24 ;=sizeof(dd)*6
lea eax,[ebp-24] ;=sizeof(dd)*6
stdcall gl_add_op,eax
ret
endp
@@ -764,19 +602,14 @@ endp
; clear
align 4
proc glClear uses eax, mask:dword
locals
p rd 2
endl
mov dword[p],OP_Clear
mov eax,[mask]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glClear: ;mask
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Clear
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
align 4
proc glClearColor uses eax, r:dword, g:dword, b:dword, a:dword
@@ -793,8 +626,7 @@ endl
mov eax,[a]
mov dword[p+16],eax
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
lea eax,[ebp-20] ;=sizeof(dd)*5
stdcall gl_add_op,eax
ret
endp
@@ -809,8 +641,7 @@ endl
fld qword[eax]
fstp dword[p+4]
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
lea eax,[ebp-8] ;=sizeof(dd)*2
stdcall gl_add_op,eax
ret
endp
@@ -818,43 +649,24 @@ endp
; textures
align 4
proc glTexImage2D uses ecx edi esi,\
target:dword, level:dword, components:dword,\
width:dword, height:dword, border:dword,\
format:dword, type:dword, pixels:dword
locals
p rd 10
endl
mov dword[p],OP_TexImage2D
mov ecx,9
mov esi,ebp
add esi,8 ;указатель на стек с входными параметрами
mov edi,ebp
sub edi,36 ;указатель на стек с локальным массивом
rep movsd ;копирование в цикле 9-ти входных параметров
mov ecx,ebp
sub ecx,40 ;=sizeof(dd)*10
stdcall gl_add_op,ecx
ret
endp
glTexImage2D: ;target, level, components, width, height, border, format, type, pixels
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_TexImage2D
stdcall gl_add_op,eax
pop eax
ret 40 ;=sizeof(dd)*10
align 4
proc glBindTexture uses eax, target:dword, texture:dword
locals
p rd 3
endl
mov dword[p],OP_BindTexture
mov eax,[target]
mov dword[p+4],eax
mov eax,[texture]
mov dword[p+8],eax
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glBindTexture: ;target, texture
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_BindTexture
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
align 4
proc glTexEnvi uses eax, target:dword, pname:dword, param:dword
@@ -873,8 +685,7 @@ endl
mov dword[p+24],0.0
mov dword[p+28],0.0
mov eax,ebp
sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall gl_add_op,eax
ret
endp
@@ -896,120 +707,74 @@ endl
mov dword[p+24],0.0
mov dword[p+28],0.0
mov eax,ebp
sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall gl_add_op,eax
ret
endp
align 4
proc glPixelStorei uses eax, pname:dword, param:dword
locals
p rd 3
endl
mov dword[p],OP_PixelStore
mov eax,[pname]
mov dword[p+4],eax
mov eax,[param]
mov dword[p+8],eax
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glPixelStorei: ;pname, param
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_PixelStore
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
; selection
align 4
proc glInitNames uses eax
locals
p dd ?
endl
mov dword[p],OP_InitNames
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glInitNames:
stdcall gl_add_op,op_InitNames
ret
endp
align 4
proc glPushName uses eax, name:dword
locals
p rd 2
endl
mov dword[p],OP_PushName
mov eax,[name]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glPushName: ;name
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_PushName
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
align 4
proc glPopName uses eax
locals
p dd ?
endl
mov dword[p],OP_PopName
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glPopName:
stdcall gl_add_op,op_PopName
ret
endp
align 4
proc glLoadName uses eax, name:dword
locals
p rd 2
endl
mov dword[p],OP_LoadName
mov eax,[name]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glLoadName: ;name
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_LoadName
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
align 4
proc glPolygonOffset uses eax, factor:dword, units:dword
locals
p rd 3
endl
mov dword[p],OP_PolygonOffset
mov eax,[factor]
mov dword[p+4],eax
mov eax,[units]
mov dword[p+8],eax
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glPolygonOffset: ;factor, units
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_PolygonOffset
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
; Special Functions
align 4
proc glCallList uses eax, list:dword
locals
p rd 2
endl
mov dword[p],OP_CallList
mov eax,[list]
mov dword[p+4],eax
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glCallList: ;list
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_CallList
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
align 4
proc glFlush ;(void)
@@ -1018,21 +783,14 @@ proc glFlush ;(void)
endp
align 4
proc glHint uses eax, target:dword, mode:dword
locals
p rd 3
endl
mov dword[p],OP_Hint
mov eax,[target]
mov dword[p+4],eax
mov eax,[mode]
mov dword[p+8],eax
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glHint: ;target, mode
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Hint
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
; Non standard functions