That info was what I needed, thank you. I've actually been working with off that info yesterday, but forgot to respond. Some updates:
-A refined version of the initial code I wrote seems to be getting the smoothest results of anything I've tried. (I accidentally overwrote the comments at some point, sorry)
loc_0x0:
lfs f18, 0(r2) ; retrieve 180
fsubs f17, f18, f18 ; make 0
fmr f26, f17 ; copy 0 to use as a counter later
fdivs f24, f18, f18 ; make 1
fadds f24, f24, f24 ; make 2
fmuls f20, f18, f24 ; make 360
fdivs f21, f18, f24 ; make 90
fmr f25, f28 ; copy angle1, this isn't necessary as you stated
loc_0x20:
fabs f19, f0 ; get abs of angle
fcmpo cr0, f0, f17 ; compare angle to 0
fdivs f16, f19, f0 ; get sign of angle
bne+ loc_0x34
fdivs f16, f18, f18 ; force sign to 1 if it was 0
loc_0x34:
fcmpo cr0, f19, f18 ; compare absolute angle to 180
ble+ loc_0x4C ; branch if lower
fmuls f22, f20, f16 ; multiply 360 by sign of angle
fsubs f0, f0, f22 ; subtract signed 360 from angle
fabs f19, f0 ; update absolute value of angle
fneg f16, f16 ; update sign
loc_0x4C:
fcmpo cr0, f19, f21 ; compare absolute angle to 90
ble+ loc_0x74 ; branch if lower
fmuls f22, f18, f16 ; multiply 180 by 90
fsubs f0, f22, f0 ; subtract angle from signed 180
fadds f26, f21, f26 ; add 90 to counter
fabs f22, f25 ; get absolute value of other angle
fadds f22, f22, f21 ; add 90 to absolute other angle
fcmpo cr0, f19, f22 ; compare absolute angle to angle before subtracting 90 to other angle
ble+ loc_0x74 ; branch if less than
fadds f26, f18, f26 ; add 180 to counter
loc_0x74:
fcmpo cr0, f21, f24 ; compare for loop
beq+ loc_0x8C ; don't branch on first run
fmr f24, f21 ; set f24 to f21
fmr f25, f0 ; record angle
fmr f0, f28 ; swap in angle1
b loc_0x20 ; loop back
loc_0x8C:
fsubs f0, f25, f0 ; angle2-angle1
fcmpo cr0, f26, f18 ; compare counter to 180
ble+ loc_0x9C ; branch if less or equal
fneg f0, f0 ; flip result
loc_0x9C:
fcmpo cr0, f27, f2
beq- loc_0xA8
blr
loc_0xA8:
fmr f27, f18
-It's mostly the same as what I was trying to do before, but actually implemented correctly. The biggest change is that I implemented the conditional difference flip I mentioned earlier.
-There's still a lot of jumps, but it's significantly better than the default calculation
-I'm not actually sure if I'm handling angles bigger than 180 properly, as I haven't found an angle bigger than 180.
I've also tried another approach. It adds or subtracts 180 from each angle until they're within [0, 180]; effectively the remainder of dividing by 180. Then it proceeds with restricting to [0,90] similarly to before. I'm including it here because while it has jumps in places my initial approach didn't, it's also smooth in areas the other isn't; may be useful for testing.
loc_0x0:
lfs f18, 0(r2)
fsubs f26, f18, f18
fdivs f24, f18, f18
fadds f24, f24, f24
fdivs f21, f18, f24
fmr f19, f28
fsubs f17, f18, f18
fcmpo cr0, f0, f18
bgt+ loc_0x3C
fcmpo cr0, f0, f17
bge+ loc_0x4C
loc_0x2C:
fadds f0, f0, f18
fcmpo cr0, f0, f17
blt+ loc_0x2C
b loc_0x4C
loc_0x3C:
fsubs f0, f0, f18
fcmpo cr0, f0, f18
bgt+ loc_0x3C
b loc_0x4C
loc_0x4C:
fcmpo cr0, f19, f18
bgt+ loc_0x6C
fcmpo cr0, f19, f17
bge+ loc_0x78
loc_0x5C:
fadds f19, f19, f18
fcmpo cr0, f19, f17
blt+ loc_0x5C
b loc_0x78
loc_0x6C:
fsubs f19, f19, f18
fcmpo cr0, f19, f18
bgt+ loc_0x6C
loc_0x78:
fmr f24, f0
fcmpo cr0, f0, f21
ble+ loc_0x9C
fadds f25, f19, f21
fcmpo cr0, f25, f0
ble+ loc_0x94
fadds f26, f18, f26
loc_0x94:
fsubs f0, f18, f0
fadds f26, f21, f26
loc_0x9C:
fcmpo cr0, f19, f21
ble+ loc_0xBC
fadds f24, f24, f21
fcmpo cr0, f24, f19
ble+ loc_0xB4
fadds f26, f18, f26
loc_0xB4:
fsubs f19, f18, f19
fadds f26, f21, f26
loc_0xBC:
fsubs f0, f0, f19
fcmpo cr0, f26, f18
blt+ loc_0xCC
fneg f0, f0
loc_0xCC:
fcmpo cr0, f27, f2
beq- loc_0xD8
blr
loc_0xD8:
fmr f27, f18
They're both a little rough in terms of efficiency, but I'm more concerned about getting either of them working first. I don't edit f28 because I couldn't remember if it needs to hold its original value after the calculation or not.
I can test how the other burst b feels soon. /edit: That feels just like the regular 30fps timing to me. I'd definitely use that over the first one.