mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-11-27 08:10:07 +08:00
59d4ccc2b0
Add a %pragma to set (or clear) listing options. It only takes effect on the next assembly pass, however! Signed-off-by: H. Peter Anvin <hpa@zytor.com>
140 lines
2.3 KiB
NASM
140 lines
2.3 KiB
NASM
bits 64
|
|
default rel
|
|
|
|
%use altreg
|
|
|
|
section .text
|
|
|
|
bar equ 0xcc
|
|
|
|
;; Each instruction group separated by blank should encode identially
|
|
|
|
;; k_mov kreg size_suffix size_name gpr big_gpr
|
|
%macro k_mov 5
|
|
kmov%2 %1,[foo]
|
|
kmov %1,%3 [foo]
|
|
kmov %3 [foo],%1
|
|
|
|
kmov%2 [foo],%1
|
|
kmov %3 [foo],%1
|
|
kmov [foo],%3 %1
|
|
kmov %3 [foo],%1
|
|
|
|
kmov%2 %1,%1
|
|
kmov %3 %1,%1
|
|
kmov %1,%3 %1
|
|
|
|
kmov%2 %1,%4
|
|
kmov%2 %1,%5
|
|
kmov %1,%4
|
|
kmov %3 %1,%4
|
|
kmov %3 %1,%5
|
|
kmov %1,%3 %4
|
|
%ifidni %4,%5
|
|
kmov %1,%5
|
|
%endif
|
|
|
|
kmov%2 %5,%1
|
|
%ifidni %4,%5
|
|
kmov %5,%1
|
|
%endif
|
|
kmov %5,%3 %1
|
|
|
|
%endmacro
|
|
|
|
%pragma list options +bempf
|
|
|
|
;; k_rr op kreg size_suffix size_name
|
|
%macro k_rr 4
|
|
%1%3 %2,%2
|
|
%1 %4 %2,%2
|
|
%1 %2,%4 %2
|
|
|
|
%endmacro
|
|
|
|
;; k_rri op kreg size_suffix size_name
|
|
%macro k_rrr 4
|
|
%1%3 %2,%2,%2
|
|
%1 %4 %2,%2,%2
|
|
%1 %2,%4 %2,%2
|
|
%1 %2,%2,%4 %2
|
|
|
|
%endmacro
|
|
|
|
;; k_rri op kreg size_suffix size_name
|
|
%macro k_rri 4
|
|
%1%3 %2,%2,bar
|
|
%1 %4 %2,%2,bar
|
|
%1 %2,%4 %2,bar
|
|
|
|
%endmacro
|
|
|
|
%define size_b byte
|
|
%define size_w word
|
|
%define size_d dword
|
|
%define size_q qword
|
|
|
|
%define gpr_b b
|
|
%define gpr_w w
|
|
%define gpr_d d
|
|
%define gpr_q
|
|
|
|
%define bgpr_b d
|
|
%define bgpr_w d
|
|
%define bgpr_d d
|
|
%define bgpr_q
|
|
|
|
;; k_test size_suffix regno
|
|
%macro k_test 2
|
|
k_mov k%2,%1,size_%1,%[r %+ %2 %+ gpr_%1],%[r %+ %2 %+ bgpr_%1]
|
|
k_rrr kadd,k%2,%1,size_%1
|
|
k_rrr kand,k%2,%1,size_%1
|
|
k_rrr kandn,k%2,%1,size_%1
|
|
k_rrr kand,k%2,%1,size_%1
|
|
k_rr knot,k%2,%1,size_%1
|
|
k_rrr kor,k%2,%1,size_%1
|
|
k_rr kortest,k%2,%1,size_%1
|
|
k_rri kshiftl,k%2,%1,size_%1
|
|
k_rri kshiftr,k%2,%1,size_%1
|
|
k_rr ktest,k%2,%1,size_%1
|
|
k_rrr kxnor,k%2,%1,size_%1
|
|
k_rrr kxor,k%2,%1,size_%1
|
|
%endmacro
|
|
|
|
%assign nreg 0
|
|
%define kreg k %+ nreg
|
|
%rep 8
|
|
|
|
k_test b,nreg
|
|
k_test w,nreg
|
|
k_test d,nreg
|
|
k_test q,nreg
|
|
|
|
kunpckbw kreg,kreg,kreg
|
|
kunpck word kreg,kreg,kreg
|
|
kunpck kreg,byte kreg,kreg
|
|
kunpck kreg,kreg,byte kreg
|
|
kunpck word kreg,byte kreg,kreg
|
|
kunpck word kreg,kreg,byte kreg
|
|
|
|
kunpckwd kreg,kreg,kreg
|
|
kunpck dword kreg,kreg,kreg
|
|
kunpck kreg,word kreg,kreg
|
|
kunpck kreg,kreg,word kreg
|
|
kunpck dword kreg,word kreg,kreg
|
|
kunpck dword kreg,kreg,word kreg
|
|
|
|
kunpckdq kreg,kreg,kreg
|
|
kunpck qword kreg,kreg,kreg
|
|
kunpck kreg,dword kreg,kreg
|
|
kunpck kreg,kreg,dword kreg
|
|
kunpck qword kreg,dword kreg,kreg
|
|
kunpck qword kreg,kreg,dword kreg
|
|
|
|
%assign nreg nreg+1
|
|
%endrep
|
|
|
|
section .bss
|
|
|
|
foo resq 1
|