mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-25 07:27:52 +01:00
add integer bitt operations
This commit is contained in:
parent
28d4fb9b1c
commit
cfac54ec40
@ -365,6 +365,66 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case and:
|
||||||
|
switch( valueType ) {
|
||||||
|
case i32:
|
||||||
|
op = I32_AND;
|
||||||
|
break;
|
||||||
|
case i64:
|
||||||
|
op = I64_AND;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case or:
|
||||||
|
switch( valueType ) {
|
||||||
|
case i32:
|
||||||
|
op = I32_OR;
|
||||||
|
break;
|
||||||
|
case i64:
|
||||||
|
op = I64_OR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case xor:
|
||||||
|
switch( valueType ) {
|
||||||
|
case i32:
|
||||||
|
op = I32_XOR;
|
||||||
|
break;
|
||||||
|
case i64:
|
||||||
|
op = I64_XOR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case shl:
|
||||||
|
switch( valueType ) {
|
||||||
|
case i32:
|
||||||
|
op = I32_SHL;
|
||||||
|
break;
|
||||||
|
case i64:
|
||||||
|
op = I64_SHL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case shr_s:
|
||||||
|
switch( valueType ) {
|
||||||
|
case i32:
|
||||||
|
op = I32_SHR_S;
|
||||||
|
break;
|
||||||
|
case i64:
|
||||||
|
op = I64_SHR_S;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case shr_u:
|
||||||
|
switch( valueType ) {
|
||||||
|
case i32:
|
||||||
|
op = I32_SHR_U;
|
||||||
|
break;
|
||||||
|
case i64:
|
||||||
|
op = I64_SHR_U;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if( op == 0 ) {
|
if( op == 0 ) {
|
||||||
throw new Error();
|
throw new Error();
|
||||||
|
@ -63,6 +63,18 @@ interface InstructionOpcodes {
|
|||||||
|
|
||||||
static final int I32_REM_S = 0x6F;
|
static final int I32_REM_S = 0x6F;
|
||||||
|
|
||||||
|
static final int I32_AND = 0x71;
|
||||||
|
|
||||||
|
static final int I32_OR = 0x72;
|
||||||
|
|
||||||
|
static final int I32_XOR = 0x73;
|
||||||
|
|
||||||
|
static final int I32_SHL = 0x74;
|
||||||
|
|
||||||
|
static final int I32_SHR_S = 0x75;
|
||||||
|
|
||||||
|
static final int I32_SHR_U = 0x76;
|
||||||
|
|
||||||
static final int I64_ADD = 0x7C;
|
static final int I64_ADD = 0x7C;
|
||||||
|
|
||||||
static final int I64_SUB = 0x7D;
|
static final int I64_SUB = 0x7D;
|
||||||
@ -73,6 +85,18 @@ interface InstructionOpcodes {
|
|||||||
|
|
||||||
static final int I64_REM_S = 0x81;
|
static final int I64_REM_S = 0x81;
|
||||||
|
|
||||||
|
static final int I64_AND = 0x83;
|
||||||
|
|
||||||
|
static final int I64_OR = 0x84;
|
||||||
|
|
||||||
|
static final int I64_XOR = 0x85;
|
||||||
|
|
||||||
|
static final int I64_SHL = 0x86;
|
||||||
|
|
||||||
|
static final int I64_SHR_S = 0x87;
|
||||||
|
|
||||||
|
static final int I64_SHR_U = 0x88;
|
||||||
|
|
||||||
static final int F32_ADD = 0x92;
|
static final int F32_ADD = 0x92;
|
||||||
|
|
||||||
static final int F32_SUB = 0x93;
|
static final int F32_SUB = 0x93;
|
||||||
|
@ -395,6 +395,42 @@ public abstract class ModuleWriter implements Closeable {
|
|||||||
case 114: // frem
|
case 114: // frem
|
||||||
case 115: // drem
|
case 115: // drem
|
||||||
throw new WasmException( "Modulo/Remainder for floating numbers is not supported in WASM. Use int or long data types." + op, sourceFile, lineNumber );
|
throw new WasmException( "Modulo/Remainder for floating numbers is not supported in WASM. Use int or long data types." + op, sourceFile, lineNumber );
|
||||||
|
case 120: // ishl
|
||||||
|
writeNumericOperator( NumericOperator.shl, ValueType.i32 );
|
||||||
|
break;
|
||||||
|
case 121: // lshl
|
||||||
|
writeNumericOperator( NumericOperator.shl, ValueType.i64 );
|
||||||
|
break;
|
||||||
|
case 122: // ishr
|
||||||
|
writeNumericOperator( NumericOperator.shr_s, ValueType.i32 );
|
||||||
|
break;
|
||||||
|
case 123: // lshr
|
||||||
|
writeNumericOperator( NumericOperator.shr_s, ValueType.i64 );
|
||||||
|
break;
|
||||||
|
case 124: // iushr
|
||||||
|
writeNumericOperator( NumericOperator.shr_u, ValueType.i32 );
|
||||||
|
break;
|
||||||
|
case 125: // lushr
|
||||||
|
writeNumericOperator( NumericOperator.shr_u, ValueType.i64 );
|
||||||
|
break;
|
||||||
|
case 126: // iand
|
||||||
|
writeNumericOperator( NumericOperator.and, ValueType.i32 );
|
||||||
|
break;
|
||||||
|
case 127: // land
|
||||||
|
writeNumericOperator( NumericOperator.and, ValueType.i64 );
|
||||||
|
break;
|
||||||
|
case 128: // ior
|
||||||
|
writeNumericOperator( NumericOperator.or, ValueType.i32 );
|
||||||
|
break;
|
||||||
|
case 129: // lor
|
||||||
|
writeNumericOperator( NumericOperator.or, ValueType.i64 );
|
||||||
|
break;
|
||||||
|
case 130: // ixor
|
||||||
|
writeNumericOperator( NumericOperator.xor, ValueType.i32 );
|
||||||
|
break;
|
||||||
|
case 131: // lxor
|
||||||
|
writeNumericOperator( NumericOperator.xor, ValueType.i64 );
|
||||||
|
break;
|
||||||
case 132: // iinc
|
case 132: // iinc
|
||||||
int idx = byteCode.readUnsignedByte();
|
int idx = byteCode.readUnsignedByte();
|
||||||
writeLoadStore( true, ValueType.i32, idx );
|
writeLoadStore( true, ValueType.i32, idx );
|
||||||
|
@ -24,4 +24,10 @@ public enum NumericOperator {
|
|||||||
mul,
|
mul,
|
||||||
div,
|
div,
|
||||||
rem,
|
rem,
|
||||||
|
and,
|
||||||
|
or,
|
||||||
|
xor,
|
||||||
|
shl,
|
||||||
|
shr_s,
|
||||||
|
shr_u,
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user