Skip to content

Commit

Permalink
minor correction in x86-64 macros
Browse files Browse the repository at this point in the history
  • Loading branch information
tgrysztar committed Nov 12, 2019
1 parent 081cd02 commit 25a80ac
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 24 deletions.
18 changes: 10 additions & 8 deletions core/examples/x86/include/x64.inc
Expand Up @@ -273,19 +273,19 @@ macro x86.encode_direct_address ns
ns.base = 5
ns.index = 4
ns.scale = 1
if ns.mode = 64
ns.displacement_size = 8
else if ns.mode = 32 & ns.displacement relativeto 0
if ns.displacement >= 100000000h | ns.displacement < -100000000h
if ns.mode = 32
if ~ ns.displacement relativeto 0 | ns.displacement >= 100000000h | ns.displacement < -100000000h
err 'address out of range'
end if
ns.displacement = ns.displacement and 0FFFFFFFFh
end if
if ~ ns.displacement relativeto 0 | ns.displacement < 80000000h | ns.displacement >= 100000000h
else if ~ ns.displacement relativeto 0 | ns.displacement < 0 | ns.displacement >= 100000000h
ns.mode = 64
else
ns.mode = 32
end if
if ns.mode = 64
ns.displacement_size = 8
end if
else
err 'invalid size of address value'
end if
Expand Down Expand Up @@ -679,7 +679,8 @@ macro mov? dest*,src*
else
size = @dest.size or @src.size
end if
if @src.type = 'reg' & @dest.type = 'mem' & @src.rm = 0 & @dest.address_registers eq 0 & ~ @dest.auto_relative
if @src.type = 'reg' & @dest.type = 'mem' & @src.rm = 0 & @dest.address_registers eq 0 & \
~ @dest.auto_relative & ( @dest.displacement_size <> 8 | ~ @dest.displacement relativeto 0 | @dest.displacement and 0FFFFFFFF80000000h <> 0FFFFFFFF80000000h)
if x86.mode = 64
if @dest.segment_prefix & @dest.segment_prefix >= 64h
db @dest.segment_prefix
Expand Down Expand Up @@ -711,7 +712,8 @@ macro mov? dest*,src*
else
dq @dest.address
end if
else if @src.type = 'mem' & @dest.type = 'reg' & @dest.rm = 0 & @src.address_registers eq 0 & ~ @src.auto_relative
else if @src.type = 'mem' & @dest.type = 'reg' & @dest.rm = 0 & @src.address_registers eq 0 & \
~ @src.auto_relative & ( @src.displacement_size <> 8 | ~ @src.displacement relativeto 0 | @src.displacement and 0FFFFFFFF80000000h <> 0FFFFFFFF80000000h)
if x86.mode = 64
if @src.segment_prefix & @src.segment_prefix >= 64h
db @src.segment_prefix
Expand Down
18 changes: 10 additions & 8 deletions packages/x86-2/x86-2.inc
Expand Up @@ -445,19 +445,19 @@ macro x86.encode_direct_address ns
ns.base = 5
ns.index = 4
ns.scale = 1
if ns.mode = 64
ns.displacement_size = 8
else if ns.mode = 32 & ns.displacement relativeto 0
if ns.displacement >= 100000000h | ns.displacement < -100000000h
if ns.mode = 32
if ~ ns.displacement relativeto 0 | ns.displacement >= 100000000h | ns.displacement < -100000000h
err 'address out of range'
end if
ns.displacement = ns.displacement and 0FFFFFFFFh
end if
if ~ ns.displacement relativeto 0 | ns.displacement < 80000000h | ns.displacement >= 100000000h
else if ~ ns.displacement relativeto 0 | ns.displacement < 0 | ns.displacement >= 100000000h
ns.mode = 64
else
ns.mode = 32
end if
if ns.mode = 64
ns.displacement_size = 8
end if
else
err 'invalid size of address value'
end if
Expand Down Expand Up @@ -879,7 +879,8 @@ macro mov? args&
else
x86.size = x86.@1.size or x86.@2.size
end if
if x86.@2.type = 'reg' & x86.@1.type = 'mem' & x86.@2.rm = 0 & x86.@1.address_registers eq 0 & ~ x86.@1.auto_relative
if x86.@2.type = 'reg' & x86.@1.type = 'mem' & x86.@2.rm = 0 & x86.@1.address_registers eq 0 & \
~ x86.@1.auto_relative & ( x86.@1.displacement_size <> 8 | ~ x86.@1.displacement relativeto 0 | x86.@1.displacement and 0FFFFFFFF80000000h <> 0FFFFFFFF80000000h)
if x86.mode = 64
if x86.@1.segment_prefix & x86.@1.segment_prefix >= 64h
db x86.@1.segment_prefix
Expand Down Expand Up @@ -911,7 +912,8 @@ macro mov? args&
else
dq x86.@1.address
end if
else if x86.@2.type = 'mem' & x86.@1.type = 'reg' & x86.@1.rm = 0 & x86.@2.address_registers eq 0 & ~ x86.@2.auto_relative
else if x86.@2.type = 'mem' & x86.@1.type = 'reg' & x86.@1.rm = 0 & x86.@2.address_registers eq 0 & \
~ x86.@2.auto_relative & ( x86.@2.displacement_size <> 8 | ~ x86.@2.displacement relativeto 0 | x86.@2.displacement and 0FFFFFFFF80000000h <> 0FFFFFFFF80000000h)
if x86.mode = 64
if x86.@2.segment_prefix & x86.@2.segment_prefix >= 64h
db x86.@2.segment_prefix
Expand Down
18 changes: 10 additions & 8 deletions packages/x86/include/cpu/x64.inc
Expand Up @@ -273,19 +273,19 @@ macro x86.encode_direct_address ns
ns.base = 5
ns.index = 4
ns.scale = 1
if ns.mode = 64
ns.displacement_size = 8
else if ns.mode = 32 & ns.displacement relativeto 0
if ns.displacement >= 100000000h | ns.displacement < -100000000h
if ns.mode = 32
if ~ ns.displacement relativeto 0 | ns.displacement >= 100000000h | ns.displacement < -100000000h
err 'address out of range'
end if
ns.displacement = ns.displacement and 0FFFFFFFFh
end if
if ~ ns.displacement relativeto 0 | ns.displacement < 80000000h | ns.displacement >= 100000000h
else if ~ ns.displacement relativeto 0 | ns.displacement < 0 | ns.displacement >= 100000000h
ns.mode = 64
else
ns.mode = 32
end if
if ns.mode = 64
ns.displacement_size = 8
end if
else
err 'invalid size of address value'
end if
Expand Down Expand Up @@ -679,7 +679,8 @@ macro mov? dest*,src*
else
size = @dest.size or @src.size
end if
if @src.type = 'reg' & @dest.type = 'mem' & @src.rm = 0 & @dest.address_registers eq 0 & ~ @dest.auto_relative
if @src.type = 'reg' & @dest.type = 'mem' & @src.rm = 0 & @dest.address_registers eq 0 & \
~ @dest.auto_relative & ( @dest.displacement_size <> 8 | ~ @dest.displacement relativeto 0 | @dest.displacement and 0FFFFFFFF80000000h <> 0FFFFFFFF80000000h)
if x86.mode = 64
if @dest.segment_prefix & @dest.segment_prefix >= 64h
db @dest.segment_prefix
Expand Down Expand Up @@ -711,7 +712,8 @@ macro mov? dest*,src*
else
dq @dest.address
end if
else if @src.type = 'mem' & @dest.type = 'reg' & @dest.rm = 0 & @src.address_registers eq 0 & ~ @src.auto_relative
else if @src.type = 'mem' & @dest.type = 'reg' & @dest.rm = 0 & @src.address_registers eq 0 & \
~ @src.auto_relative & ( @src.displacement_size <> 8 | ~ @src.displacement relativeto 0 | @src.displacement and 0FFFFFFFF80000000h <> 0FFFFFFFF80000000h)
if x86.mode = 64
if @src.segment_prefix & @src.segment_prefix >= 64h
db @src.segment_prefix
Expand Down

0 comments on commit 25a80ac

Please sign in to comment.