Bill Buzbee | 3b0b4b9 | 2016-02-02 13:45:36 +0000 | [diff] [blame^] | 1 | %default {"wide":"", "r1":"s1", "r2":"s2", "default_val":"-1","cond":"le"} |
| 2 | /* |
| 3 | * Compare two floating-point values. Puts 0, 1, or -1 into the |
| 4 | * destination register based on the results of the comparison. |
| 5 | */ |
| 6 | /* op vAA, vBB, vCC */ |
| 7 | FETCH w0, 1 // w0<- CCBB |
| 8 | lsr w4, wINST, #8 // w4<- AA |
| 9 | and w2, w0, #255 // w2<- BB |
| 10 | lsr w3, w0, #8 // w3<- CC |
| 11 | GET_VREG$wide $r1, w2 |
| 12 | GET_VREG$wide $r2, w3 |
| 13 | mov w0, #$default_val |
| 14 | fcmp $r1, $r2 |
| 15 | csneg w0, w0, w0, $cond |
| 16 | csel w0, wzr, w0, eq |
| 17 | FETCH_ADVANCE_INST 2 // advance rPC, load rINST |
| 18 | GET_INST_OPCODE ip // extract opcode from rINST |
| 19 | SET_VREG w0, w4 // vAA<- w0 |
| 20 | GOTO_OPCODE ip // jump to next instruction |