hex.pointers.xor_hex_to_flip_ptr (arity 2)¶
xors (the parameter hex, shifted left by bit_shift) to the hex/byte pointed by the memory-word hex.pointers.to_flip.
use after: .pointers.set_flip_pointer ptr
does: .xor *ptr, hex<<bit_shift (as it uses the address in to_flip)
It assumes that the value in the memory-word to_flip is a dw-aligned address to an hex-variable.
bit_shift is a constant that’s assumed to be divisible by 4.
@Assumes: bit_shift is divisible by 4.
@Assumes: bit_shift is divisible by 4
Signature¶
def xor_hex_to_flip_ptr hex, bit_shift @ prepare_flip_bit0, prepare_flip_bit1, prepare_flip_bit2, prepare_flip_bit3, after_flip_bit0, after_flip_bit1, after_flip_bit2, after_flip_bit3, cleanup < hex.pointers.to_flip { ... }
Defined in hex/pointers/xor_to_pointer.fj — lines 118–147 (view on GitHub).
Complexity¶
Time:
5@+12Space:
5@+76
See the complexity glossary for what @, w, dw, dbit, n mean.
Source¶
Click to view the macro body
def xor_hex_to_flip_ptr hex, bit_shift @ prepare_flip_bit0, prepare_flip_bit1, prepare_flip_bit2, prepare_flip_bit3, \
after_flip_bit0, after_flip_bit1, after_flip_bit2, after_flip_bit3, cleanup < hex.pointers.to_flip {
wflip hex.pointers.to_flip+w, after_flip_bit0, prepare_flip_bit0
prepare_flip_bit0:
wflip hex.pointers.to_flip, dbit+0+bit_shift
hex.if_flags hex, 0xAAAA, after_flip_bit0, hex.pointers.to_flip
prepare_flip_bit1:
wflip hex.pointers.to_flip, (dbit+0+bit_shift)^(dbit+1+bit_shift)
hex.if_flags hex, 0xCCCC, after_flip_bit1, hex.pointers.to_flip
prepare_flip_bit3:
wflip hex.pointers.to_flip, (dbit+1+bit_shift)^(dbit+3+bit_shift)
hex.if_flags hex, 0xFF00, after_flip_bit3, hex.pointers.to_flip
prepare_flip_bit2:
wflip hex.pointers.to_flip, (dbit+3+bit_shift)^(dbit+2+bit_shift)
hex.if_flags hex, 0xF0F0, after_flip_bit2, hex.pointers.to_flip
pad 4
after_flip_bit0:
hex.pointers.to_flip+dbit+0;prepare_flip_bit1
after_flip_bit1:
hex.pointers.to_flip+dbit+1;prepare_flip_bit3
after_flip_bit2:
wflip hex.pointers.to_flip, dbit+2+bit_shift, cleanup
after_flip_bit3:
hex.pointers.to_flip+dbit+0;prepare_flip_bit2
cleanup:
wflip hex.pointers.to_flip+w, after_flip_bit2
}
Depends on¶
Used by¶
Example uses¶
hex.pointers.xor_hex_to_flip_ptrinhex/pointers/xor_to_pointer.fj
← Previous: hex.pointers.xor_byte_to_flip_ptr
Next: hex.ptr_wflip →