• #### MIPS - expand SLE pseudoinstruction

From kukadlo@pobox.sk@21:1/5 to All on Tue Jan 17 21:51:35 2017
Hello,

Probably way too late to reply, but I was actually looking for it and this post come near top in google (and I didn't find it).

So I finally got about 20h later (after I got curious) to MARS simulator, to see how it does it (was driving me crazy), and it turned out I had total mind blackout :/.

slt is (x < y)

sle is (x <= y) <=> !(x > y) <=> !(y < x)

Doh! I mean... I was even "so sge is 'slt (y < x)', I see, but how do they the sle?". Blind leads blind...

So it gets compiled as:

sle \$4, \$5, \$6 =
slt \$4, \$6, \$5 ; r = y < x
ori \$1, \$0, 1 ; \$at = 1
subu \$4, \$1, \$4 ; r = \$at - r = not(y < x)

Which leaves me wondering, why not:

sle \$4, \$5, \$6 =
slt \$4, \$6, \$5 ; r = y < x
xori \$4, \$4, 1 ; r = not(y < x)

? is xori somehow bad? (I don't know anything about MIPS CPU, I just by accident did help with some assembly to somebody else, and the "sle"-being-only-pseudo-instruction made me curious, how one can do it simply)

And for completeness:

seq (x == y) is treated a bit sideways, it does: r = |x - y| < 1
subu r, x, y
ori \$at, \$zero, 1
sltu r, r, \$at

sne (x != y) is: r = 0 < |x - y|
subu r, x, y
sltu r, \$zero, r

Ped7g

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)