11452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee /* 21452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * Compare two floating-point values. Puts 0, 1, or -1 into the 31452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * destination register based on the results of the comparison. 41452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * 51452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * int compare(x, y) { 61452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * if (x == y) { 71452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * return 0; 81452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * } else if (x > y) { 91452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * return 1; 101452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * } else if (x < y) { 111452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * return -1; 121452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * } else { 131452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * return -1; 141452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * } 151452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * } 161452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee */ 171452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee /* op vAA, vBB, vCC */ 181452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee FETCH r0, 1 @ r0<- CCBB 191452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee mov r9, rINST, lsr #8 @ r9<- AA 201452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee and r2, r0, #255 @ r2<- BB 211452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee mov r3, r0, lsr #8 @ r3<- CC 221452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee VREG_INDEX_TO_ADDR r2, r2 @ r2<- &vBB 231452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee VREG_INDEX_TO_ADDR r3, r3 @ r3<- &vCC 241452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee flds s0, [r2] @ s0<- vBB 251452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee flds s1, [r3] @ s1<- vCC 2696530d346917cf3877e7d0df9a05a6a3464fe432buzbee vcmpe.f32 s0, s1 @ compare (vBB, vCC) 271452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee FETCH_ADVANCE_INST 2 @ advance rPC, load rINST 281452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee mvn r0, #0 @ r0<- -1 (default) 291452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee GET_INST_OPCODE ip @ extract opcode from rINST 301452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee fmstat @ export status flags 311452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee movgt r0, #1 @ (greater than) r1<- 1 321452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee moveq r0, #0 @ (equal) r1<- 0 331452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee SET_VREG r0, r9 @ vAA<- r0 341452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee GOTO_OPCODE ip @ jump to next instruction 35