mirror of
https://github.com/intel/isa-l.git
synced 2024-12-12 17:33:50 +01:00
igzip: add macros for shrx, shlx, and bzhi instructions on old architectures
Signed-off-by: Roy Oursler <roy.j.oursler@intel.com> Reviewed-by: Greg Tucker <greg.b.tucker@intel.com>
This commit is contained in:
parent
bbc886cf01
commit
7c91df5e50
@ -205,3 +205,69 @@ ssc:
|
||||
mov rbx, rax
|
||||
ret
|
||||
%endm
|
||||
|
||||
;; Implement BZHI instruction on older architectures
|
||||
;; Clobbers rcx, unless rcx is %%index
|
||||
%macro BZHI 4
|
||||
%define %%dest %1
|
||||
%define %%src %2
|
||||
%define %%index %3
|
||||
%define %%tmp1 %4
|
||||
|
||||
%ifdef USE_HSWNI
|
||||
bzhi %%src, %%dest, %%index
|
||||
%else
|
||||
%ifnidn %%index, rcx
|
||||
mov rcx, %%index
|
||||
%endif
|
||||
mov %%tmp1, 1
|
||||
shl %%tmp1, cl
|
||||
sub %%tmp1, 1
|
||||
|
||||
%ifnidn %%src, %%dest
|
||||
mov %%dest, %%src
|
||||
%endif
|
||||
|
||||
and %%dest, %%tmp1
|
||||
%endif
|
||||
%endm
|
||||
|
||||
;; Implement shrx instruction on older architectures
|
||||
;; Clobbers rcx, unless rcx is %%index
|
||||
%macro SHRX 3
|
||||
%define %%dest %1
|
||||
%define %%src %2
|
||||
%define %%index %3
|
||||
|
||||
%ifdef USE_HSWNI
|
||||
shrx %%dest, %%src, %%index
|
||||
%else
|
||||
%ifnidn %%src, %%dest
|
||||
mov %%dest, %%src
|
||||
%endif
|
||||
%ifnidn %%index, rcx
|
||||
mov rcx, %%index
|
||||
%endif
|
||||
shr %%dest, cl
|
||||
%endif
|
||||
%endm
|
||||
|
||||
;; Implement shlx instruction on older architectures
|
||||
;; Clobbers rcx, unless rcx is %%index
|
||||
%macro SHLX 3
|
||||
%define %%dest %1
|
||||
%define %%src %2
|
||||
%define %%index %3
|
||||
|
||||
%ifdef USE_HSWNI
|
||||
shlx %%dest, %%src, %%index
|
||||
%else
|
||||
%ifnidn %%src, %%dest
|
||||
mov %%dest, %%src
|
||||
%endif
|
||||
%ifnidn %%index, rcx
|
||||
mov rcx, %%index
|
||||
%endif
|
||||
shl %%dest, cl
|
||||
%endif
|
||||
%endm
|
||||
|
Loading…
Reference in New Issue
Block a user