mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-15 08:51:24 +00:00
- removed assembly files.
This commit is contained in:
parent
1ad3b39e70
commit
13832eebc2
3 changed files with 0 additions and 5920 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,220 +0,0 @@
|
|||
;;; x86_64 assembly for basic texture mapping functions, based on a.nasm.
|
||||
;;; For use with System V AMD64 calling convention (rdi rsi rdx rcx r8 r9)
|
||||
;;; See the included license file "BUILDLIC.TXT" for license info.
|
||||
|
||||
SECTION .text
|
||||
|
||||
%ifdef UNDERSCORES
|
||||
%define asm1 _asm1
|
||||
%define asm2 _asm2
|
||||
|
||||
%define a64_bpl _a64_bpl
|
||||
%define a64_transmode _a64_transmode
|
||||
%define a64_glogy _a64_glogy
|
||||
%define a64_gtrans _a64_gtrans
|
||||
%define a64_paloffs _a64_paloffs
|
||||
|
||||
%define tvlineasm1 _tvlineasm1
|
||||
%define tvlineasm2 _tvlineasm2
|
||||
%endif
|
||||
|
||||
;;; Imports
|
||||
EXTERN asm1 ; intptr_t
|
||||
EXTERN asm2 ; intptr_t
|
||||
|
||||
EXTERN a64_bpl ; int32_t
|
||||
EXTERN a64_transmode ; int32_t
|
||||
EXTERN a64_glogy ; int32_t
|
||||
EXTERN a64_gtrans ; char *
|
||||
EXTERN a64_paloffs ; intptr_t
|
||||
|
||||
;;; Exports
|
||||
GLOBAL tvlineasm1 ; Masked & transluscent 1-pixel wide vline
|
||||
GLOBAL tvlineasm2 ; Masked & transluscent 2-pixel wide vline
|
||||
|
||||
|
||||
;;; ========== MACROS ==========
|
||||
|
||||
; Construct name referring to low doubleword of GPR, only for r8-r15.
|
||||
%define REGd(reg) reg %+ d
|
||||
; Construct name of whole GPR from word-sized register, only for ax-bp.
|
||||
%define rREG(regw) r %+ regw
|
||||
; Construct name of low doubleword of GPR from word-sized register, only for ax-bp.
|
||||
%define eREG(regw) e %+ regw
|
||||
|
||||
;;; Multi-line macros for code shared between functions
|
||||
|
||||
;; Prologue getters
|
||||
%macro PGET_rBpl 0
|
||||
push rBpl
|
||||
mov REGd(rBpl), dword [rel a64_bpl]
|
||||
%endmacro
|
||||
|
||||
%macro PGET_rATransluc 0
|
||||
push rATransluc
|
||||
mov rATransluc, [rel a64_gtrans]
|
||||
%endmacro
|
||||
|
||||
; Get right shift count 'glogy' into cl
|
||||
%macro GET_cl 0
|
||||
mov cl, byte [rel a64_glogy]
|
||||
%endmacro
|
||||
|
||||
; Look up texel
|
||||
; <dest_reg_lobyte> := bufplc[vplc>>glogy]
|
||||
; High bytes are cleared to zero.
|
||||
%macro gettexel 3 ; <dest_reg_word> <bufplc_reg> <vlpc_reg>
|
||||
mov eREG(%1), %3
|
||||
shr eREG(%1), cl
|
||||
movzx eREG(%1), byte [%2 + rREG(%1)]
|
||||
%endmacro
|
||||
|
||||
; Do palette/shade and translucency lookup
|
||||
%macro dotranspal 4 ; <tmp_reg> <tmp_reg_lobyte> <texel_reg> <dst_ofs>
|
||||
; Get palette index of the pixel in the frame buffer.
|
||||
; NOTE: e.g. "mov ah, byte [reg]" is not encodeable.
|
||||
movzx %1, byte [rDst + %4]
|
||||
shl %1, 8
|
||||
|
||||
mov %2, byte [rAPalookup + %3] ; palette/shade
|
||||
mov %2, byte [rATransluc + %1] ; translucency
|
||||
%endmacro
|
||||
|
||||
|
||||
;;; ========== TVLINEASM1 ==========
|
||||
;;; TODO: transmode, nonpow2
|
||||
|
||||
;;; Registers used in the loop
|
||||
%define rBpl r10
|
||||
%define rATransluc r12
|
||||
%define rVplc r11d
|
||||
|
||||
;;; Registers of input args also used in the loop
|
||||
%define rVinc edi
|
||||
%define rAPalookup rsi
|
||||
%define rCnt edx
|
||||
%define rABufplc r8
|
||||
%define rDst r9
|
||||
|
||||
;;; int32_t tvlineasm1(vinc, *paloffs, cnt, vplc, *bufplc, *p)
|
||||
;;; eax edi rsi edx ecx r8 r9
|
||||
ALIGN 16
|
||||
tvlineasm1:
|
||||
inc rCnt
|
||||
;; First, back up callee-saved registers and set up those used in the loop.
|
||||
PGET_rBpl
|
||||
mov rVplc, ecx
|
||||
GET_cl
|
||||
PGET_rATransluc
|
||||
push rbx
|
||||
jmp short tv1_loop
|
||||
|
||||
ALIGN 16
|
||||
tv1_loop:
|
||||
gettexel bx, rABufplc, rVplc
|
||||
cmp bl, 255
|
||||
je short tv1_skiptrans
|
||||
|
||||
dotranspal rax, al, rbx, 0
|
||||
mov byte [rDst], al
|
||||
tv1_skiptrans:
|
||||
add rVplc, rVinc
|
||||
add rDst, rBpl
|
||||
dec rCnt
|
||||
jnz short tv1_loop
|
||||
|
||||
mov eax, rVplc ; return vplc
|
||||
pop rbx
|
||||
pop rATransluc
|
||||
pop rBpl
|
||||
ret
|
||||
|
||||
;;; Undefine input arg macros
|
||||
%undef rVinc
|
||||
%undef rAPalookup
|
||||
%undef rCnt
|
||||
%undef rABufplc
|
||||
%undef rDst
|
||||
|
||||
;;; Udefine rVplc register macro, but keep rBpl and rATransluc (r10 and r12).
|
||||
;;; Take care not to clash with them in the following.
|
||||
%undef rVplc
|
||||
|
||||
|
||||
;;; ========== TVLINEASM2 ==========
|
||||
|
||||
;;; Registers used in the loop
|
||||
%define rVinc2 r11d
|
||||
%define rABufplc2 r13
|
||||
%define rDstEnd r14
|
||||
%define rAPalookup r15 ; TODO: second paloffs!
|
||||
|
||||
;;; Registers of input args also used in the loop
|
||||
%define rVplc2 edi
|
||||
%define rVinc1 esi
|
||||
%define rABufplc1 rdx
|
||||
; bufplc2: rcx -> r13
|
||||
%define rVplc1 r8d
|
||||
%define rDst r9
|
||||
|
||||
;;; Pass: asm1=vinc2, asm2=pend
|
||||
;;; Return: asm1=vplc1, asm2=vplc2
|
||||
;;; void tvlineasm2(vplc2, vinc1, *bufplc1, *bufplc2, vplc1, *p)
|
||||
;;; edi esi rdx rcx r8d r9
|
||||
|
||||
ALIGN 16
|
||||
tvlineasm2:
|
||||
;; First, back up callee-saved registers and set up those used in the loop.
|
||||
mov rVinc2, dword [rel asm1]
|
||||
PGET_rBpl
|
||||
push rABufplc2
|
||||
mov rABufplc2, rcx
|
||||
GET_cl
|
||||
PGET_rATransluc
|
||||
|
||||
push rDstEnd
|
||||
mov rDstEnd, [rel asm2]
|
||||
dec rDstEnd
|
||||
add rDstEnd, rBpl ; one more: compare with a-c.c's tvlineasm2()
|
||||
|
||||
push rbx
|
||||
push rbp
|
||||
push rAPalookup
|
||||
mov rAPalookup, [rel a64_paloffs]
|
||||
jmp short tv2_loop
|
||||
|
||||
ALIGN 16
|
||||
tv2_loop:
|
||||
gettexel bx, rABufplc1, rVplc1
|
||||
gettexel bp, rABufplc2, rVplc2
|
||||
|
||||
mov eax, ebp
|
||||
shl eax, 8
|
||||
or eax, ebx
|
||||
|
||||
cmp eax, 0xffff
|
||||
jz tv2_skiptrans
|
||||
|
||||
dotranspal rax, al, rbx, 0
|
||||
dotranspal rbx, bl, rbp, 1
|
||||
and rax, 0xff
|
||||
shl rbx, 8
|
||||
or rax, rbx
|
||||
|
||||
mov word [rDst], ax
|
||||
|
||||
tv2_skiptrans:
|
||||
add rVplc1, rVinc1
|
||||
add rVplc2, rVinc2
|
||||
add rDst, rBpl
|
||||
cmp rDst, rDstEnd
|
||||
jnz tv2_loop
|
||||
|
||||
pop r15
|
||||
pop rbp
|
||||
pop rbx
|
||||
pop rDstEnd
|
||||
pop rATransluc
|
||||
pop rABufplc2
|
||||
pop rBpl
|
||||
ret
|
Loading…
Reference in a new issue