namespace Unity.Burst.Editor { internal partial class BurstDisassembler { internal class WasmInstructionInfo { internal static bool GetWasmInfo(string instructionName, out string instructionInfo) { var returnValue = true; switch (instructionName) { case "if": instructionInfo = "Executes a statement if the last item on the stack is true."; break; case "end": instructionInfo = "Can be used to end a block, loop, if or else."; break; case "end_function": instructionInfo = "Ends function."; break; case "block": instructionInfo = "Creates a label that can later be branched out of with a br."; break; case "end_block": instructionInfo = "Ends the previous opened block."; break; case "loop": instructionInfo = "Creates a label that can later be branched to with a br."; break; case "end_loop": instructionInfo = "Ends the previous opened loop label."; break; case "unreachable": instructionInfo = "Denotes a point in code that should not be reachable."; break; case "nop": instructionInfo = "Does nothing."; break; case "call": instructionInfo = "Calls a function."; break; case "call_indirect": instructionInfo = "Calls a function in a table."; break; case "drop": instructionInfo = "Pops a value from the stack, and discards it."; break; case "select": instructionInfo = "Selects one of its first two operands based on a boolean condition."; break; case "get": instructionInfo = "Load the value of a variable onto the stack."; break; case "set": instructionInfo = "Set the value of a variable."; break; case "tee": instructionInfo = "Set the value of a variable and keep the value on the stack."; break; case "load": instructionInfo = "Load a number from memory."; break; case "load8_s": instructionInfo = "Load a signed 8-bit value from memory."; break; case "load8_u": instructionInfo = "Load an unsigned 8-bit value from memory."; break; case "load16_s": instructionInfo = "Load a signed 16-bit value from memory."; break; case "load16_u": instructionInfo = "Load an unsigned 16-bit value from memory."; break; case "load32_s": instructionInfo = "Load a signed 32-bit value from memory."; break; case "load32_u": instructionInfo = "Load an unsigned 32-bit value from memory."; break; case "store": instructionInfo = "Store a number in memory."; break; case "store8": instructionInfo = "Store a 8-bit number in memory."; break; case "store16": instructionInfo = "Store a 16-bit number in memory."; break; case "store32": instructionInfo = "Store a 32-bit number in memory."; break; case "size": instructionInfo = "Get the size of the memory instance."; break; case "grow": instructionInfo = "Increase the size of the memory instance."; break; case "const": instructionInfo = "Declare a constant number."; break; case "clz": instructionInfo = "Count leading zeros in a numbers binary representation."; break; case "ctz": instructionInfo = "Count trailing zeros in a numbers binary representation."; break; case "popcnt": instructionInfo = "Count the number of '1' in a numbers binary representation."; break; case "add": instructionInfo = "Add up two numbers."; break; case "sub": instructionInfo = "Subtract one number from another number."; break; case "mul": instructionInfo = "Multiply one number by another number."; break; case "div_s": instructionInfo = "Divide two signed numbers."; break; case "div_u": instructionInfo = "Divide two unsigned numbers."; break; case "rem_s": instructionInfo = "Calculate the remainder left over when two signed integers are divided."; break; case "rem_u": instructionInfo = "Calculate the remainder left over when two unsigned integers are divided."; break; case "and": instructionInfo = "Bitwise and operation."; break; case "or": instructionInfo = "Bitwise or operation."; break; case "xor": instructionInfo = "Bitwise exclusive or operation."; break; case "shl": instructionInfo = "Bitwise shift left operation."; break; case "shr_s": instructionInfo = "Bitwise signed shift right operation."; break; case "shr_u": instructionInfo = "Bitwise unsigned shift right operation."; break; case "rotl": instructionInfo = "Bitwise rotate left operation."; break; case "rotr": instructionInfo = "Bitwise rotate right operation."; break; case "abs": instructionInfo = "Get the absolute value of a number."; break; case "neg": instructionInfo = "Negate a number."; break; case "ceil": instructionInfo = "Round up a number."; break; case "floor": instructionInfo = "Round down a number."; break; case "trunc": instructionInfo = "Discard the fractional part of a number."; break; case "sqrt": instructionInfo = "Get the square root of a number."; break; case "div": instructionInfo = "Divide two numbers."; break; case "min": instructionInfo = "Get the lower of two numbers."; break; case "max": instructionInfo = "Get the highest of two numbers."; break; case "copysign": instructionInfo = "Copy just the sign bit from one number to another."; break; case "wrap_i64": instructionInfo = "Convert (wrap) i64 number to i32 number."; break; case "trunc_f32_s": instructionInfo = "Truncate fractional part away from a signed 32-bit floating number, giving a " + "signed 32-bit integer."; break; case "trunc_f32_u": instructionInfo = "Truncate fractional part away from a unsigned 32-bit floating number, giving a " + "unsigned 32-bit integer."; break; case "trunc_f64_s": instructionInfo = "Truncate fractional part away from a signed 64-bit floating number, giving a " + "signed 64-bit integer."; break; case "trunc_f64_u": instructionInfo = "Truncate fractional part away from a unsigned 64-bit floating number, giving a " + "unsigned 64-bit integer."; break; case "extend_i32_s": instructionInfo = "Convert (extend) signed 32-bit integer to signed 64-bit integer number."; break; case "extend_i32_u": instructionInfo = "Convert (extend) unsigned 32-bit integer to unsigned 64-bit integer number."; break; case "convert_i32_s": instructionInfo = "Convert signed 32-bit integer to signed 32-bit floating number."; break; case "convert_i32_u": instructionInfo = "Convert unsigned 32-bit integer to unsigned 32-bit floating number."; break; case "convert_i64_s": instructionInfo = "Convert signed 64-bit integer to signed 64-bit floating number."; break; case "convert_i64_u": instructionInfo = "Convert unsigned 64-bit integer to unsigned 64-bit floating number."; break; case "demote_f64": instructionInfo = "Convert (demote) 64-bit floating number to 32-bit floating number."; break; case "promote_f32": instructionInfo = "Convert (promote) 32-bit floating number to 64-bit floating number."; break; case "reinterpret_f32": instructionInfo = "Reinterpret the bytes of 32-bit floating number as 32-bit integer number."; break; case "reinterpret_f64": instructionInfo = "Reinterpret the bytes of 64-bit floating number as 64-bit integer number."; break; case "reinterpret_i32": instructionInfo = "Reinterpret the bytes of 32-bit integer number as 32-bit floating number."; break; case "reinterpret_i64": instructionInfo = "Reinterpret the bytes of 64-bit integer number as 64-bit floating number."; break; case "br_if": instructionInfo = "Branch to a loop or block if condition is true."; break; case "br": instructionInfo = "Branch to a loop or block."; break; case "br_table": instructionInfo = "Branch to a loop or block if condition based on argument."; break; case "return": instructionInfo = "Returns from a function."; break; default: instructionInfo = string.Empty; break; } return returnValue; } } } }