mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-09 15:19:07 +00:00
wasm: implement more math operations on 128 bit integers
these operations are required to be able to print floats
This commit is contained in:
parent
9d6b6bddb6
commit
ec7f88945b
1 changed files with 7 additions and 1 deletions
|
|
@ -2650,12 +2650,18 @@ fn binOp(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: Op) InnerError!
|
|||
|
||||
fn binOpBigInt(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: Op) InnerError!WValue {
|
||||
const mod = func.bin_file.base.options.module.?;
|
||||
if (ty.intInfo(mod).bits > 128) {
|
||||
const int_info = ty.intInfo(mod);
|
||||
if (int_info.bits > 128) {
|
||||
return func.fail("TODO: Implement binary operation for big integers larger than 128 bits", .{});
|
||||
}
|
||||
|
||||
switch (op) {
|
||||
.mul => return func.callIntrinsic("__multi3", &.{ ty.toIntern(), ty.toIntern() }, ty, &.{ lhs, rhs }),
|
||||
.div => switch (int_info.signedness) {
|
||||
.signed => return func.callIntrinsic("__udivti3", &.{ ty.toIntern(), ty.toIntern() }, ty, &.{ lhs, rhs }),
|
||||
.unsigned => return func.callIntrinsic("__divti3", &.{ ty.toIntern(), ty.toIntern() }, ty, &.{ lhs, rhs }),
|
||||
},
|
||||
.rem => return func.callIntrinsic("__umodti3", &.{ ty.toIntern(), ty.toIntern() }, ty, &.{ lhs, rhs }),
|
||||
.shr => return func.callIntrinsic("__lshrti3", &.{ ty.toIntern(), .i32_type }, ty, &.{ lhs, rhs }),
|
||||
.shl => return func.callIntrinsic("__ashlti3", &.{ ty.toIntern(), .i32_type }, ty, &.{ lhs, rhs }),
|
||||
.xor => {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue