100b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze%default {} 200b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze /*: 300b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * Generic 64-bit floating-point operation. 400b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * 500b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * For: add-double, sub-double, mul-double, div-double. 600b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * form: <op> f0, f0, f1 700b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze */ 800b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze /* binop vAA, vBB, vCC */ 900b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze srl a4, rINST, 8 # a4 <- AA 1000b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze lbu a2, 2(rPC) # a2 <- BB 1100b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze lbu a3, 3(rPC) # a3 <- CC 1200b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GET_VREG_DOUBLE f0, a2 # f0 <- vBB 1300b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GET_VREG_DOUBLE f1, a3 # f1 <- vCC 1400b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze $instr # f0 <- f0 op f1 1500b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze FETCH_ADVANCE_INST 2 # advance rPC, load rINST 1600b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GET_INST_OPCODE v0 # extract opcode from rINST 1700b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze SET_VREG_DOUBLE f0, a4 # vAA <- f0 1800b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GOTO_OPCODE v0 # jump to next instruction 19