| 83 | |
| 84 | // Holder for an i128 value that is split into two i64s |
| 85 | class ValueSplit { |
| 86 | public: |
| 87 | ValueSplit(llvm::Value* high, llvm::Value* low) : high_(high), low_(low) {} |
| 88 | |
| 89 | // Make from i128 value |
| 90 | static ValueSplit MakeFromInt128(DecimalIR* decimal_ir, llvm::Value* in); |
| 91 | |
| 92 | // Make from IR struct |
| 93 | static ValueSplit MakeFromStruct(DecimalIR* decimal_ir, llvm::Value* dstruct); |
| 94 | |
| 95 | // Combine the two parts into an i128 |
| 96 | llvm::Value* AsInt128(DecimalIR* decimal_ir) const; |
| 97 | |
| 98 | llvm::Value* high() const { return high_; } |
| 99 | llvm::Value* low() const { return low_; } |
| 100 | |
| 101 | private: |
| 102 | llvm::Value* high_; |
| 103 | llvm::Value* low_; |
| 104 | }; |
| 105 | |
| 106 | // Add global variables to the module. |
| 107 | static void AddGlobals(Engine* engine); |
no outgoing calls
no test coverage detected