mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			148 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
; Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
 | 
						|
; 
 | 
						|
; This library is free software; you can redistribute it and/or
 | 
						|
; modify it under the terms of the GNU Library General Public
 | 
						|
; License as published by the Free Software Foundation; either
 | 
						|
; version 2 of the License, or (at your option) any later version.
 | 
						|
; 
 | 
						|
; This library is distributed in the hope that it will be useful,
 | 
						|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
; Library General Public License for more details.
 | 
						|
; 
 | 
						|
; You should have received a copy of the GNU Library General Public
 | 
						|
; License along with this library; if not, write to the Free
 | 
						|
; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 | 
						|
; MA 02111-1307, USA
 | 
						|
 | 
						|
; Some useful macros
 | 
						|
 | 
						|
	.386P
 | 
						|
	.387
 | 
						|
 | 
						|
_FLAT	equ	0		;FLAT memory model
 | 
						|
_STDCALL equ	0		;default to _stdcall
 | 
						|
I386	equ	1
 | 
						|
 | 
						|
begcode macro	module
 | 
						|
    if _FLAT
 | 
						|
_TEXT	segment dword use32 public 'CODE'
 | 
						|
	  assume	CS:FLAT,DS:FLAT,SS:FLAT
 | 
						|
    else
 | 
						|
_TEXT	segment dword public 'CODE'
 | 
						|
	  assume	CS:_TEXT
 | 
						|
    endif
 | 
						|
	endm
 | 
						|
 | 
						|
endcode macro	module
 | 
						|
_TEXT	ENDS
 | 
						|
	endm
 | 
						|
 | 
						|
begdata macro
 | 
						|
 | 
						|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
						|
; Set up segments for data
 | 
						|
; Regular initialized data goes in _DATA
 | 
						|
 | 
						|
_DATA	segment dword public 'DATA'
 | 
						|
_DATA	ends
 | 
						|
 | 
						|
;Function pointers to constructors
 | 
						|
XIB	segment dword public 'DATA'
 | 
						|
XIB	ends
 | 
						|
XI	segment dword public 'DATA'
 | 
						|
XI	ends
 | 
						|
XIE	segment dword public 'DATA'
 | 
						|
XIE	ends
 | 
						|
 | 
						|
;Function pointers to destructors
 | 
						|
XCB	segment dword public 'DATA'
 | 
						|
XCB	ends
 | 
						|
XC	segment dword public 'DATA'
 | 
						|
XC	ends
 | 
						|
XCE	segment dword public 'DATA'
 | 
						|
XCE	ends
 | 
						|
 | 
						|
;Constant data, such as switch tables, go here.
 | 
						|
 | 
						|
CONST	segment dword public 'CONST'
 | 
						|
CONST	ends
 | 
						|
 | 
						|
;Segment for uninitialized data. This is set to 0 by the startup code/OS,
 | 
						|
;so it does not consume room in the executable file.
 | 
						|
 | 
						|
_BSS	segment dword public 'BSS'
 | 
						|
_BSS	ends
 | 
						|
 | 
						|
HUGE_BSS	segment dword public 'HUGE_BSS'
 | 
						|
HUGE_BSS	ends
 | 
						|
 | 
						|
EEND	segment dword public 'ENDBSS'
 | 
						|
EEND	ends
 | 
						|
 | 
						|
STACK	segment para stack 'STACK'
 | 
						|
STACK	ends
 | 
						|
DGROUP	group	_DATA,XIB,XI,XIE,XCB,XC,XCE,CONST,_BSS,EEND,STACK
 | 
						|
 | 
						|
_DATA	segment
 | 
						|
	if _FLAT
 | 
						|
	  assume DS:FLAT
 | 
						|
	else
 | 
						|
	  assume DS:DGROUP
 | 
						|
	endif
 | 
						|
	endm
 | 
						|
 | 
						|
enddata macro
 | 
						|
_DATA	ends
 | 
						|
	endm
 | 
						|
 | 
						|
P	equ	8	; Offset of start of parameters on the stack frame
 | 
						|
			; From EBP assuming EBP was pushed.
 | 
						|
PS	equ	4	; Offset of start of parameters on the stack frame
 | 
						|
			; From ESP assuming EBP was NOT pushed.
 | 
						|
ESeqDS	equ	0
 | 
						|
FSeqDS	equ	0
 | 
						|
GSeqDS	equ	0
 | 
						|
SSeqDS	equ	1
 | 
						|
SIZEPTR equ	4	; Size of a pointer
 | 
						|
LPTR	equ	0
 | 
						|
SPTR	equ	1
 | 
						|
LCODE	equ	0
 | 
						|
 | 
						|
func	macro	name
 | 
						|
_&name	proc	near
 | 
						|
    ifndef name
 | 
						|
name	equ	_&name
 | 
						|
    endif
 | 
						|
	endm
 | 
						|
 | 
						|
callm	macro	name
 | 
						|
	call	_&name
 | 
						|
	endm
 | 
						|
 | 
						|
;Macros to replace public, extrn, and endp for C-callable assembly routines,
 | 
						|
; and to define labels: c_label defines labels,
 | 
						|
; c_public replaces public, c_extrn replaces extrn, and c_endp replaces endp
 | 
						|
 | 
						|
c_name	macro	name
 | 
						|
	name equ _&name
 | 
						|
	endm
 | 
						|
 | 
						|
c_label macro	name
 | 
						|
_&name:
 | 
						|
	endm
 | 
						|
 | 
						|
c_endp	macro	name
 | 
						|
_&name	ENDP
 | 
						|
	endm
 | 
						|
 | 
						|
clr	macro	list		;clear a register
 | 
						|
	irp	reg,<list>
 | 
						|
	 xor	reg,reg
 | 
						|
	endm
 | 
						|
	endm
 | 
						|
 | 
						|
jmps	macro	lbl
 | 
						|
	jmp	short	lbl
 | 
						|
	endm
 |