| 786 | } |
| 787 | |
| 788 | static unique_ptr<Instr> parse_fp_binop(string_view name, token op_token) { |
| 789 | auto fmath = parse_fast_math(op_token); |
| 790 | auto &type = parse_type(); |
| 791 | auto &a = parse_operand(type); |
| 792 | parse_comma(); |
| 793 | Type &type_rhs = try_parse_type(type); |
| 794 | auto &b = parse_operand(type_rhs); |
| 795 | Type *rettype = &type; |
| 796 | |
| 797 | FpBinOp::Op op; |
| 798 | switch (op_token) { |
| 799 | case FADD: op = FpBinOp::FAdd; break; |
| 800 | case FSUB: op = FpBinOp::FSub; break; |
| 801 | case FMUL: op = FpBinOp::FMul; break; |
| 802 | case FDIV: op = FpBinOp::FDiv; break; |
| 803 | case FREM: op = FpBinOp::FRem; break; |
| 804 | case FMAX: op = FpBinOp::FMax; break; |
| 805 | case FMIN: op = FpBinOp::FMin; break; |
| 806 | case FMAXIMUM: op = FpBinOp::FMaximum; break; |
| 807 | case FMINIMUM: op = FpBinOp::FMinimum; break; |
| 808 | case FMAXIMUMNUM: op = FpBinOp::FMaximumnum; break; |
| 809 | case FMINIMUMNUM: op = FpBinOp::FMinimumnum; break; |
| 810 | default: |
| 811 | UNREACHABLE(); |
| 812 | } |
| 813 | return make_unique<FpBinOp>(*rettype, string(name), a, b, op, fmath, |
| 814 | FpRoundingMode(), FpExceptionMode()); |
| 815 | } |
| 816 | |
| 817 | static unique_ptr<Instr> parse_unaryop(string_view name, token op_token) { |
| 818 | UnaryOp::Op op; |
no test coverage detected