mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-15 02:44:47 +01:00
implements all data conversions instruction codes
This commit is contained in:
parent
f93b164476
commit
6da8916a75
@ -548,11 +548,41 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
|
||||
protected void writeCast( ValueTypeConvertion cast ) throws IOException {
|
||||
int op;
|
||||
switch( cast ) {
|
||||
case i2l:
|
||||
op = I64_EXTEND_S_I32;
|
||||
break;
|
||||
case i2f:
|
||||
op = F32_CONVERT_S_I32;
|
||||
break;
|
||||
case i2d:
|
||||
op = F64_CONVERT_S_I32;
|
||||
break;
|
||||
case l2i:
|
||||
op = I32_WRAP_I64;
|
||||
break;
|
||||
case i2l:
|
||||
op = I64_EXTEND_S_I32;
|
||||
case l2f:
|
||||
op = F32_CONVERT_S_I64;
|
||||
break;
|
||||
case l2d:
|
||||
op = F64_CONVERT_S_I64;
|
||||
break;
|
||||
case f2i:
|
||||
op = I32_TRUNC_S_F32;
|
||||
break;
|
||||
case f2l:
|
||||
op = I64_TRUNC_S_F32;
|
||||
break;
|
||||
case f2d:
|
||||
op = F64_PROMOTE_F32;
|
||||
break;
|
||||
case d2i:
|
||||
op = I32_TRUNC_S_F64;
|
||||
break;
|
||||
case d2l:
|
||||
op = I64_TRUNC_S_F64;
|
||||
break;
|
||||
case d2f:
|
||||
op = F32_DEMOTE_F64;
|
||||
break;
|
||||
default:
|
||||
throw new Error( "Unknown cast: " + cast );
|
||||
|
@ -582,9 +582,39 @@ public abstract class ModuleWriter implements Closeable {
|
||||
case 133: // i2l
|
||||
writeCast( ValueTypeConvertion.i2l );
|
||||
break;
|
||||
case 134: // i2f
|
||||
writeCast( ValueTypeConvertion.i2f );
|
||||
break;
|
||||
case 135: // i2d
|
||||
writeCast( ValueTypeConvertion.i2d );
|
||||
break;
|
||||
case 136: // l2i
|
||||
writeCast( ValueTypeConvertion.l2i );
|
||||
break;
|
||||
case 137: // l2f
|
||||
writeCast( ValueTypeConvertion.l2f );
|
||||
break;
|
||||
case 138: // l2d
|
||||
writeCast( ValueTypeConvertion.l2d );
|
||||
break;
|
||||
case 139: // f2i
|
||||
writeCast( ValueTypeConvertion.f2i );
|
||||
break;
|
||||
case 140: // f2l
|
||||
writeCast( ValueTypeConvertion.f2l );
|
||||
break;
|
||||
case 141: // f2d
|
||||
writeCast( ValueTypeConvertion.f2d );
|
||||
break;
|
||||
case 142: // d2i
|
||||
writeCast( ValueTypeConvertion.d2i );
|
||||
break;
|
||||
case 143: // d2l
|
||||
writeCast( ValueTypeConvertion.d2l );
|
||||
break;
|
||||
case 144: // d2f
|
||||
writeCast( ValueTypeConvertion.d2f );
|
||||
break;
|
||||
case 145: // i2b
|
||||
writeConstInt( 24 );
|
||||
writeNumericOperator( NumericOperator.shl, ValueType.i32 );
|
||||
|
@ -177,11 +177,41 @@ public class TextModuleWriter extends ModuleWriter {
|
||||
protected void writeCast( ValueTypeConvertion cast ) throws IOException {
|
||||
String op;
|
||||
switch( cast ) {
|
||||
case i2l:
|
||||
op = "i64.extend_s/i32";
|
||||
break;
|
||||
case i2f:
|
||||
op = "f32.convert_s/i32";
|
||||
break;
|
||||
case i2d:
|
||||
op = "f64.convert_s/i32";
|
||||
break;
|
||||
case l2i:
|
||||
op = "i32.wrap/i64";
|
||||
break;
|
||||
case i2l:
|
||||
op = "i64.extend_s/i32";
|
||||
case l2f:
|
||||
op = "f32.convert_s/i64";
|
||||
break;
|
||||
case l2d:
|
||||
op = "f64.convert_s/i64";
|
||||
break;
|
||||
case f2i:
|
||||
op = "i32.trunc_s/f32";
|
||||
break;
|
||||
case f2l:
|
||||
op = "i64.trunc_s/f32";
|
||||
break;
|
||||
case f2d:
|
||||
op = "f64.promote/f32";
|
||||
break;
|
||||
case d2i:
|
||||
op = "i32.trunc_s/f64";
|
||||
break;
|
||||
case d2l:
|
||||
op = "i64.trunc_s/f64";
|
||||
break;
|
||||
case d2f:
|
||||
op = "f32.demote/f64";
|
||||
break;
|
||||
default:
|
||||
throw new Error( "Unknown cast: " + cast );
|
||||
|
@ -89,10 +89,13 @@ public class MathOperations extends AbstractBaseTest {
|
||||
@Export
|
||||
static int addInt( int a, int b ) {
|
||||
int c = 1234567;
|
||||
int d = -1234567;
|
||||
int e = -1;
|
||||
double d = -1234567;
|
||||
int i = 1;
|
||||
long l = 2;
|
||||
float f = 3;
|
||||
b++;
|
||||
return a + b + c + d + e;
|
||||
return a + b + c + e + (int)d + i + (int)l + (int)f;
|
||||
}
|
||||
|
||||
@Export
|
||||
@ -105,9 +108,12 @@ public class MathOperations extends AbstractBaseTest {
|
||||
@Export
|
||||
static float addFloat( float a, float b ) {
|
||||
float c = -1;
|
||||
float d = 1234;
|
||||
float e = 1.25F;
|
||||
return a + b + c + d + e;
|
||||
double d = 1234;
|
||||
int i = 1;
|
||||
long l = 2;
|
||||
float f = 3;
|
||||
return a + b + c + e + (float)d + i + l + f;
|
||||
}
|
||||
|
||||
@Export
|
||||
@ -115,7 +121,10 @@ public class MathOperations extends AbstractBaseTest {
|
||||
double c = -1;
|
||||
double d = 1234;
|
||||
double e = 1.25;
|
||||
return a + b + c + d + e;
|
||||
int i = 1;
|
||||
long l = 2;
|
||||
float f = 3;
|
||||
return a + b + c + d + e + i + l + f;
|
||||
}
|
||||
|
||||
@Export
|
||||
@ -128,10 +137,12 @@ public class MathOperations extends AbstractBaseTest {
|
||||
long a = -1L;
|
||||
long b = 3L;
|
||||
long c = -1L;
|
||||
long d = 1234L;
|
||||
int e = 3;
|
||||
double d = 1234;
|
||||
int i = 1;
|
||||
long l = 2;
|
||||
float f = 3;
|
||||
a--;
|
||||
return (int)(a - b - c - d + e);
|
||||
return (int)(a - b - c - (long)d - i - l - (long)f);
|
||||
}
|
||||
|
||||
@Export
|
||||
|
Loading…
x
Reference in New Issue
Block a user