How to convert "or" to SPARC assembly? -
i'm trying convert following line sparc assembly (using negative logic):
if (i < || > b) {...}
but i've stuck on how convert "or" bitwise or in sparc. , couldn't find helpful documentations convert this. can help? thank you.
(suppose i
in $l0
, a
in $l1
, , b
in $l2
)
edit:
here have tried:
cmp %l0, %l1 ! compare bge end_if ! negative logic test end if statement nop cmp %l0, %l2 ! compare b ble end_if ! negative logic test end if statement nop if: /*do something*/ end_if: /*statements*/
the more specific question how use "or" between 2 cmp
instructions? getting confusing me when using negative logic.
your code:
cmp %l0, %l1 ! compare bge end_if ! negative logic test end if statement nop cmp %l0, %l2 ! compare b ble end_if ! negative logic test end if statement nop if: /*do something*/ end_if: /*statements*/
is and. both sub-conditions must fulfilled, reach "do something" code. (a bit of boolean logic perhaps helps explaining: !(a ^ b) = !a v !b
note: combining operation changes! )
for or, have use different logic:
test condition1 jump_if_true doit test condition2 jmp_if_true doit ; *1) branch , jmp dont_doit ; jmp can optimized do_it: /* if-part */ jmp endif dont_do_it /* else-part */ endif:
now optimized last 2 jumps one
test condition1 jump_if_true doit test condition2 jmp_if_not_true dont_doit ; inverted remove 2nd jump doit: /* if-part */ jmp endif dont_doit /* else-part */ endif:
Comments
Post a Comment