mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-15 02:44:47 +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;
|
||||
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 ) {
|
||||
throw new Error();
|
||||
|
@ -63,6 +63,18 @@ interface InstructionOpcodes {
|
||||
|
||||
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_SUB = 0x7D;
|
||||
@ -73,6 +85,18 @@ interface InstructionOpcodes {
|
||||
|
||||
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_SUB = 0x93;
|
||||
|
@ -395,6 +395,42 @@ public abstract class ModuleWriter implements Closeable {
|
||||
case 114: // frem
|
||||
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 );
|
||||
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
|
||||
int idx = byteCode.readUnsignedByte();
|
||||
writeLoadStore( true, ValueType.i32, idx );
|
||||
|
@ -24,4 +24,10 @@ public enum NumericOperator {
|
||||
mul,
|
||||
div,
|
||||
rem,
|
||||
and,
|
||||
or,
|
||||
xor,
|
||||
shl,
|
||||
shr_s,
|
||||
shr_u,
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user