Tsify generated asm docs (#4388)

* Converted amd64 docs to ts

* 6502

* 6502 part 2

* arm

* avr

* evm

* java

* llvm

* python

* Fix bug with only getting the first paragraph

* Updated help messages
This commit is contained in:
Jeremy Rifkin
2022-12-02 14:36:10 -05:00
committed by GitHub
parent 2e844e9ef5
commit 836a2d7005
25 changed files with 851 additions and 4164 deletions

View File

@@ -8,5 +8,5 @@ views
cypress
# Autogenerated files
lib/asm-docs/generated/asm-docs-*.js
lib/asm-docs/generated/asm-docs-*
etc/scripts/docenizer/vendor/jvms.html

2
.gitattributes vendored
View File

@@ -1,5 +1,5 @@
docs/* linguist-documentation
*.s linguist-generated
*.asm linguist-generated
lib/asm-docs/generated/asm-docs-*.js linguist-generated
lib/asm-docs/generated/asm-docs-* linguist-generated
test/*-cases/* linguist-generated

View File

@@ -3,7 +3,7 @@ include:
- lib/**/*.js
- lib/**/*.ts
exclude:
- lib/asm-docs/generated/asm-docs-*.js
- lib/asm-docs/generated/asm-docs-*
- lib/compilers/fake-for-test.js
- lib/**/*.d.ts
report-dir: ./out/coverage

View File

@@ -38,7 +38,7 @@ examples
out
# Autogenerated files
lib/asm-docs/generated/asm-docs-*.js
lib/asm-docs/generated/asm-docs-*
#########################

5
etc/scripts/docenizers/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
asm-docs
asm-docs-arm
evm-inst-docs
python-inst-docs
vendor/*.html

View File

@@ -7,7 +7,7 @@ import re
import urllib.request
DOC_URL_BASE = "https://raw.githubusercontent.com/mist64/c64ref/master/6502/"
DOC_URL_BASE = "https://raw.githubusercontent.com/mist64/c64ref/4274bd8782c5d3b18c68e6b9479b0ec751eb96b1/Source/6502/"
doc_files = {f"{DOC_URL_BASE}{filename}":cpu_type for filename, cpu_type in {
"cpu_6502.txt" : "6502",
"cpu_65c02.txt" : "65c02",
@@ -135,7 +135,9 @@ def parse_descriptions(line, line_num, cpu_type, instructions):
def write_script(filename, instructions):
script = ["export function getAsmOpcode(opcode) {",
script = ["import {AssemblyInstructionInfo} from '../base';",
"",
"export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {",
" if (!opcode) return;",
" switch (opcode.toUpperCase()) {"]
for inst in instructions.values():
@@ -176,7 +178,7 @@ def escape_quotes(string):
def get_arguments():
parser = argparse.ArgumentParser()
help_text = "the location to which the script will be written"
relative_path = "/../../../lib/handlers/asm-docs-6502.js"
relative_path = "../../../../lib/asm-docs/generated/asm-docs-6502.ts"
script_path = os.path.realpath(__file__)
script_dir = os.path.dirname(script_path)
default_path = os.path.normpath(script_dir + relative_path)

View File

@@ -19,8 +19,8 @@ parser = argparse.ArgumentParser(description='Docenizes HTML version of the offi
parser.add_argument('-i', '--inputfolder', type=str,
help='Folder where the input files reside as .html. Default is ./asm-docs/',
default='asm-docs')
parser.add_argument('-o', '--outputpath', type=str, help='Final path of the .js file. Default is ./asm-docs.js',
default='./asm-docs.js')
parser.add_argument('-o', '--outputpath', type=str, help='Final path of the .ts file. Default is ./asm-docs-amd64.ts',
default='./asm-docs-amd64.ts')
parser.add_argument('-d', '--downloadfolder', type=str,
help='Folder where the archive will be downloaded and extracted', default='asm-docs')
@@ -354,10 +354,12 @@ def main():
print(f"Writing {len(instructions)} instructions")
with open(args.outputpath, 'w') as f:
f.write("""
export function getAsmOpcode(opcode) {
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode.toUpperCase()) {
""")
""".lstrip())
for inst in instructions:
for name in sorted(inst.names):
f.write(f' case "{name}":\n')

View File

@@ -19,8 +19,8 @@ parser = argparse.ArgumentParser(description='Docenizes XML version of the offic
parser.add_argument('-i', '--inputfolder', type=str,
help='Folder where the input files reside as .xml. Default is ./asm-docs-arm/',
default='asm-docs-arm')
parser.add_argument('-o', '--outputpath', type=str, help='Final path of the .js file. Default is ./asm-docs-arm.js',
default='./asm-docs-arm.js')
parser.add_argument('-o', '--outputpath', type=str, help='Final path of the .ts file. Default is ./asm-docs-arm32.ts',
default='./asm-docs-arm32.ts')
parser.add_argument('-d', '--downloadfolder', type=str,
help='Folder where the archive will be downloaded and extracted', default='asm-docs-arm')
@@ -178,10 +178,13 @@ def docenizer():
sys.exit(3)
print("Writing {} instructions".format(len(instructions)))
with open(args.outputpath, 'w') as f:
f.write("""export function getAsmOpcode(opcode) {
f.write("""
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode) {
""")
""".lstrip())
for inst in instructions:
for name in sorted(inst.names):
f.write(' case "{}":\n'.format(name))

View File

@@ -36,7 +36,7 @@ def main():
def get_arguments():
parser = argparse.ArgumentParser()
help_text = "the location to which the script will be written"
relative_path = "/../../../lib/handlers/asm-docs-avr.js"
relative_path = "../../../../lib/asm-docs/generated/asm-docs-avr.ts"
script_path = os.path.realpath(__file__)
script_dir = os.path.dirname(script_path)
default_path = os.path.normpath(script_dir + relative_path)
@@ -89,7 +89,9 @@ def process_description(desc):
def write_script(filename, instructions):
log_message(f"writing to {filename}...")
with open(filename, "w") as script:
script.write("export function getAsmOpcode(opcode) {\n")
script.write("import {AssemblyInstructionInfo} from '../base';\n")
script.write("\n")
script.write("export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {\n")
script.write(" if (!opcode) return;\n")
script.write(" switch (opcode.toUpperCase()) {\n")
for inst in instructions.values():

View File

@@ -13,8 +13,8 @@ parser = argparse.ArgumentParser(description='Docenizes the EVM documentation')
parser.add_argument('-i', '--inputfolder', type=str,
help='Folder where the input files reside as .html. Default is ./evm-inst-docs/',
default='evm-inst-docs')
parser.add_argument('-o', '--outputpath', type=str, help='Final path of the .js file. Default is ./evm-inst-docs.js',
default='./evm-inst-docs.js')
parser.add_argument('-o', '--outputpath', type=str, help='Final path of the .ts file. Default is ./asm-docs-evm.ts',
default='./asm-docs-evm.ts')
parser.add_argument('-d', '--downloadfolder', type=str,
help='Folder where the archive will be downloaded and extracted', default='evm-inst-docs')
@@ -126,10 +126,12 @@ def main():
print(f"Writing {len(instructions)} instructions")
with open(args.outputpath, 'w') as f:
f.write("""
export function getAsmOpcode(opcode) {
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode.toUpperCase()) {
""")
""".lstrip())
for inst in instructions:
f.write(f' case "{inst.mnemonic}":\n')
f.write(' return {}'.format(json.dumps({

View File

@@ -89,7 +89,9 @@ const main = async () => {
.slice(1) // Drop 1 because the first is the "mne monic"
.map(it => extract($(it), $))
.flat();
console.log('export function getAsmOpcode(opcode) {');
console.log('import {AssemblyInstructionInfo} from \'../base\';');
console.log('');
console.log('export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {');
console.log(' if (!opcode) return;');
console.log(' switch (opcode.toUpperCase()) {');
for (const instruction of instructions) {

View File

@@ -5,4 +5,4 @@ JVMS_PATH=$(pwd)/vendor/jvms.html
[ -f "$JVMS_PATH" ] || curl https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html -o "$JVMS_PATH"
$(pwd)/../find-node ../../../.node-bin
$(cat ../../../.node-bin) docenizer-java.js > ../../../lib/asm-docs/generated/asm-docs-java.js
$(cat ../../../.node-bin) docenizer-java.js > ../../../lib/asm-docs/generated/asm-docs-java.ts

View File

@@ -4,4 +4,4 @@ LANGREF_PATH=$(pwd)/vendor/LangRef.html
[ -f "$LANGREF_PATH" ] || curl https://llvm.org/docs/LangRef.html -o "$LANGREF_PATH"
../../../node_modules/.bin/ts-node-esm docenizer-llvm.ts > ../../../lib/asm-docs/generated/asm-docs-llvm.js
../../../node_modules/.bin/ts-node-esm docenizer-llvm.ts > ../../../lib/asm-docs/generated/asm-docs-llvm.ts

View File

@@ -49,7 +49,9 @@ const $ = cheerio.load(contents);
const names = getInstructionList($.root(), $);
const info = names.map((x) => getInstructionInfo(x, $.root(), $));
console.log('export function getAsmOpcode(opcode) {');
console.log('import {AssemblyInstructionInfo} from \'../base\';');
console.log('');
console.log('export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {');
console.log(' if (!opcode) return;');
console.log(' switch (opcode.toUpperCase()) {');
@@ -57,8 +59,8 @@ for (const instruction of info) {
console.log(` case '${instruction.name.toUpperCase()}':`);
console.log(' return {');
console.log(` url: \`${instruction.url}\`,`);
console.log(` html: \`${instruction.html.replace('\n', '')}\`,`);
console.log(` tooltip: \`${instruction.tooltip.replace('\n', '')}\`,`);
console.log(` html: \`${instruction.html.replaceAll('\n', '').replaceAll('`', '\\`')}\`,`);
console.log(` tooltip: \`${instruction.tooltip.replaceAll('\n', '').replaceAll('`', '\\`')}\`,`);
console.log(' };');
}

View File

@@ -18,8 +18,8 @@ parser = argparse.ArgumentParser(description='Docenizes HTML version of the offi
parser.add_argument('-i', '--inputfolder', type=str,
help='Folder where the input files reside as .html. Default is ./python-inst-docs/',
default='python-inst-docs')
parser.add_argument('-o', '--outputpath', type=str, help='Final path of the .js file. Default is ./python-inst-docs.js',
default='./python-inst-docs.js')
parser.add_argument('-o', '--outputpath', type=str, help='Final path of the .ts file. Default is ./asm-docs-python.ts',
default='./asm-docs-python.ts')
parser.add_argument('-d', '--downloadfolder', type=str,
help='Folder where the archive will be downloaded and extracted', default='python-inst-docs')
@@ -114,10 +114,12 @@ def main():
print(f"Writing {len(instructions)} instructions")
with open(args.outputpath, 'w') as f:
f.write("""
export function getAsmOpcode(opcode) {
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode.toUpperCase()) {
""")
""".lstrip())
for inst in instructions:
for name in sorted(inst.names):
f.write(f' case "{name}":\n')

View File

@@ -0,0 +1,6 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"lib": ["es2021"],
}
}

View File

@@ -1,4 +1,6 @@
export function getAsmOpcode(opcode) {
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode.toUpperCase()) {
case "ADC":
@@ -17,7 +19,7 @@ export function getAsmOpcode(opcode) {
case "ASL":
return {
"html": "<p>The shift left instruction shifts either the accumulator or the address memory location 1 bit to the left, with the bit 0 always being set to 0 and the bit 7 output always being contained in the carry flag. ASL either shifts the accumulator left 1 bit or is a read/modify/write instruction that affects only memory.</p><p>The instruction does not affect the overflow bit, sets N equal to the result bit 7 (bit 6 in the input), sets Z flag if the result is equal to 0, otherwise resets Z and stores the input bit 7 in the carry flag.</p>",
"html": "<p>The shift left instruction shifts either the accumulator or the address memory location 1 bit to the left, with the bit 0 always being set to 0 and the the input bit 7 being stored in the carry flag. ASL either shifts the accumulator left 1 bit or is a read/modify/write instruction that affects only memory.</p><p>The instruction does not affect the overflow bit, sets N equal to the result bit 7 (bit 6 in the input), sets Z flag if the result is equal to 0, otherwise resets Z and stores the input bit 7 in the carry flag.</p>",
"tooltip": "Arithmetic Shift Left",
"url": "https://www.pagetable.com/c64ref/6502/?cpu=6502&tab=2#ASL",
};

View File

@@ -1,4 +1,6 @@
export function getAsmOpcode(opcode) {
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode) {
case "ADC":
@@ -2661,7 +2663,7 @@ export function getAsmOpcode(opcode) {
case "VEXT":
return {
"tooltip": "Vector Extract extracts elements from the bottom end of the second operand vector and the top end of the first, concatenates them and places the result in the destination vector.",
"html": "<p>Vector Extract extracts elements from the bottom end of the second operand vector and the top end of the first, concatenates them and places the result in the destination vector.</p><p>The elements of the vectors are treated as being 8-bit fields. There is no distinction between data types.</p><p><image file=\"vext_doubleword_operation_for_imm_3.svg\" label=\"VEXT doubleword operation for imm = 3\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Extract extracts elements from the bottom end of the second operand vector and the top end of the first, concatenates them and places the result in the destination vector.</p><p>The elements of the vectors are treated as being 8-bit fields. There is no distinction between data types.</p><p><image file=\"vext_doubleword_operation_for_imm_3.svg\" label=\"VEXT doubleword operation for imm = 3\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
@@ -3183,7 +3185,7 @@ export function getAsmOpcode(opcode) {
case "VPADAL":
return {
"tooltip": "Vector Pairwise Add and Accumulate Long adds adjacent pairs of elements of a vector, and accumulates the results into the elements of the destination vector.",
"html": "<p>Vector Pairwise Add and Accumulate Long adds adjacent pairs of elements of a vector, and accumulates the results into the elements of the destination vector.</p><p>The vectors can be doubleword or quadword. The operand elements can be 8-bit, 16-bit, or 32-bit integers. The result elements are twice the length of the operand elements.</p><p><image file=\"vpadal_doubleword_operation_for_data_type_s16.svg\" label=\"VPADAL doubleword operation for data type S16\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Pairwise Add and Accumulate Long adds adjacent pairs of elements of a vector, and accumulates the results into the elements of the destination vector.</p><p>The vectors can be doubleword or quadword. The operand elements can be 8-bit, 16-bit, or 32-bit integers. The result elements are twice the length of the operand elements.</p><p><image file=\"vpadal_doubleword_operation_for_data_type_s16.svg\" label=\"VPADAL doubleword operation for data type S16\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
@@ -3197,14 +3199,14 @@ export function getAsmOpcode(opcode) {
case "VPADD":
return {
"tooltip": "Vector Pairwise Add (integer) adds adjacent pairs of elements of two vectors, and places the results in the destination vector.",
"html": "<p>Vector Pairwise Add (integer) adds adjacent pairs of elements of two vectors, and places the results in the destination vector.</p><p>The operands and result are doubleword vectors.</p><p>The operand and result elements must all be the same type, and can be 8-bit, 16-bit, or 32-bit integers. There is no distinction between signed and unsigned integers.</p><p><image file=\"vpadd_operation_for_data_type_i16.svg\" label=\"VPADD doubleword operation for data type I16\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Pairwise Add (integer) adds adjacent pairs of elements of two vectors, and places the results in the destination vector.</p><p>The operands and result are doubleword vectors.</p><p>The operand and result elements must all be the same type, and can be 8-bit, 16-bit, or 32-bit integers. There is no distinction between signed and unsigned integers.</p><p><image file=\"vpadd_operation_for_data_type_i16.svg\" label=\"VPADD doubleword operation for data type I16\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
case "VPADDL":
return {
"tooltip": "Vector Pairwise Add Long adds adjacent pairs of elements of two vectors, and places the results in the destination vector.",
"html": "<p>Vector Pairwise Add Long adds adjacent pairs of elements of two vectors, and places the results in the destination vector.</p><p>The vectors can be doubleword or quadword. The operand elements can be 8-bit, 16-bit, or 32-bit integers. The result elements are twice the length of the operand elements.</p><p><image file=\"vpaddl_doubleword_operation_for_data_type_s16.svg\" label=\"VPADDL doubleword operation for data type S16\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Pairwise Add Long adds adjacent pairs of elements of two vectors, and places the results in the destination vector.</p><p>The vectors can be doubleword or quadword. The operand elements can be 8-bit, 16-bit, or 32-bit integers. The result elements are twice the length of the operand elements.</p><p><image file=\"vpaddl_doubleword_operation_for_data_type_s16.svg\" label=\"VPADDL doubleword operation for data type S16\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
@@ -3218,7 +3220,7 @@ export function getAsmOpcode(opcode) {
case "VPMAX":
return {
"tooltip": "Vector Pairwise Maximum compares adjacent pairs of elements in two doubleword vectors, and copies the larger of each pair into the corresponding element in the destination doubleword vector.",
"html": "<p>Vector Pairwise Maximum compares adjacent pairs of elements in two doubleword vectors, and copies the larger of each pair into the corresponding element in the destination doubleword vector.</p><p><image file=\"vpmax_operation_for_data_type_s16_or_u16.svg\" label=\"VPMAX doubleword operation for data type S16 or U16\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Pairwise Maximum compares adjacent pairs of elements in two doubleword vectors, and copies the larger of each pair into the corresponding element in the destination doubleword vector.</p><p><image file=\"vpmax_operation_for_data_type_s16_or_u16.svg\" label=\"VPMAX doubleword operation for data type S16 or U16\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
@@ -3383,21 +3385,21 @@ export function getAsmOpcode(opcode) {
case "VREV16":
return {
"tooltip": "Vector Reverse in halfwords reverses the order of 8-bit elements in each halfword of the vector, and places the result in the corresponding destination vector.",
"html": "<p>Vector Reverse in halfwords reverses the order of 8-bit elements in each halfword of the vector, and places the result in the corresponding destination vector.</p><p>There is no distinction between data types, other than size.</p><p><image file=\"vrev16_operation_examples.svg\" label=\"VREV16 doubleword operation\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Reverse in halfwords reverses the order of 8-bit elements in each halfword of the vector, and places the result in the corresponding destination vector.</p><p>There is no distinction between data types, other than size.</p><p><image file=\"vrev16_operation_examples.svg\" label=\"VREV16 doubleword operation\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
case "VREV32":
return {
"tooltip": "Vector Reverse in words reverses the order of 8-bit or 16-bit elements in each word of the vector, and places the result in the corresponding destination vector.",
"html": "<p>Vector Reverse in words reverses the order of 8-bit or 16-bit elements in each word of the vector, and places the result in the corresponding destination vector.</p><p>There is no distinction between data types, other than size.</p><p><image file=\"vrev32_operation_examples.svg\" label=\"VREV32 doubleword operations\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Reverse in words reverses the order of 8-bit or 16-bit elements in each word of the vector, and places the result in the corresponding destination vector.</p><p>There is no distinction between data types, other than size.</p><p><image file=\"vrev32_operation_examples.svg\" label=\"VREV32 doubleword operations\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
case "VREV64":
return {
"tooltip": "Vector Reverse in doublewords reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector, and places the result in the corresponding destination vector.",
"html": "<p>Vector Reverse in doublewords reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector, and places the result in the corresponding destination vector.</p><p>There is no distinction between data types, other than size.</p><p><image file=\"vrev64_operation_examples.svg\" label=\"VREV64 doubleword operations\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Reverse in doublewords reverses the order of 8-bit, 16-bit, or 32-bit elements in each doubleword of the vector, and places the result in the corresponding destination vector.</p><p>There is no distinction between data types, other than size.</p><p><image file=\"vrev64_operation_examples.svg\" label=\"VREV64 doubleword operations\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
@@ -3774,7 +3776,7 @@ export function getAsmOpcode(opcode) {
case "VTRN":
return {
"tooltip": "Vector Transpose treats the elements of its operand vectors as elements of 2 x 2 matrices, and transposes the matrices.",
"html": "<p>Vector Transpose treats the elements of its operand vectors as elements of 2 x 2 matrices, and transposes the matrices.</p><p>The elements of the vectors can be 8-bit, 16-bit, or 32-bit. There is no distinction between data types.</p><p><image file=\"vtrn_doubleword_operation.svg\" label=\"VTRN doubleword operations\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Transpose treats the elements of its operand vectors as elements of 2 x 2 matrices, and transposes the matrices.</p><p>The elements of the vectors can be 8-bit, 16-bit, or 32-bit. There is no distinction between data types.</p><p><image file=\"vtrn_doubleword_operation.svg\" label=\"VTRN doubleword operations\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
@@ -3830,14 +3832,14 @@ export function getAsmOpcode(opcode) {
case "VUZP":
return {
"tooltip": "Vector Unzip de-interleaves the elements of two vectors.",
"html": "<p>Vector Unzip de-interleaves the elements of two vectors.</p><p>The elements of the vectors can be 8-bit, 16-bit, or 32-bit. There is no distinction between data types.</p><p><image file=\"operation_doubleword_vuzp8.svg\" label=\"VUZP doubleword operation for data type 8\"></image></p><p><image file=\"operation_quadword_vuzp32.svg\" label=\"VUZP quadword operation for data type 32\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Unzip de-interleaves the elements of two vectors.</p><p>The elements of the vectors can be 8-bit, 16-bit, or 32-bit. There is no distinction between data types.</p><p><image file=\"operation_doubleword_vuzp8.svg\" label=\"VUZP doubleword operation for data type 8\"/></p><p><image file=\"operation_quadword_vuzp32.svg\" label=\"VUZP quadword operation for data type 32\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};
case "VZIP":
return {
"tooltip": "Vector Zip interleaves the elements of two vectors.",
"html": "<p>Vector Zip interleaves the elements of two vectors.</p><p>The elements of the vectors can be 8-bit, 16-bit, or 32-bit. There is no distinction between data types.</p><p><image file=\"operation_doubleword_vzip8.svg\" label=\"VZIP doubleword operation for data type 8\"></image></p><p><image file=\"operation_quadword_vzip32.svg\" label=\"VZIP quadword operation for data type 32\"></image></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"html": "<p>Vector Zip interleaves the elements of two vectors.</p><p>The elements of the vectors can be 8-bit, 16-bit, or 32-bit. There is no distinction between data types.</p><p><image file=\"operation_doubleword_vzip8.svg\" label=\"VZIP doubleword operation for data type 8\"/></p><p><image file=\"operation_quadword_vzip32.svg\" label=\"VZIP quadword operation for data type 32\"/></p><p>Depending on settings in the <xref linkend=\"AArch32.cpacr\">CPACR</xref>, <xref linkend=\"AArch32.nsacr\">NSACR</xref>, and <xref linkend=\"AArch32.hcptr\">HCPTR</xref> registers, and the Security state and PE mode in which the instruction is executed, an attempt to execute the instruction might be <arm-defined-word>undefined</arm-defined-word>, or trapped to Hyp mode. For more information see <xref linkend=\"CIHIDDFF\">Enabling Advanced SIMD and floating-point support</xref>.</p>",
"url": "https://developer.arm.com/documentation/ddi0597/2020-12/Base-Instructions/"
};

View File

@@ -1,4 +1,6 @@
export function getAsmOpcode(opcode) {
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode.toUpperCase()) {
case "ADC":

View File

@@ -1,5 +1,6 @@
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode) {
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode.toUpperCase()) {
case "STOP":

View File

@@ -1,4 +1,6 @@
export function getAsmOpcode(opcode) {
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode.toUpperCase()) {
case 'AALOAD':
@@ -142,25 +144,25 @@ export function getAsmOpcode(opcode) {
case 'D2F':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.d2f`,
html: `<p>Instruction d2f: Convert double to float</p><p>Format: d2f</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.d2f.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>) resulting in <span class="emphasis"><em>value</em></span>'. Then <span class="emphasis"><em>value</em></span>' is converted to a <code class="literal">float</code> <span class="emphasis"><em>result</em></span> using the round to nearest rounding policy (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8" title="2.8.&nbsp;Floating-Point Arithmetic">§2.8</a>). The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction d2f: Convert double to float</p><p>Format: d2f</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.d2f.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and converted to a <code class="literal">float</code> <span class="emphasis"><em>result</em></span> using the round to nearest rounding policy (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8" title="2.8.&nbsp;Floating-Point Arithmetic">§2.8</a>). The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Convert double to float`,
};
case 'D2I':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.d2i`,
html: `<p>Instruction d2i: Convert double to int</p><p>Format: d2i</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.d2i.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>) resulting in <span class="emphasis"><em>value</em></span>'. Then <span class="emphasis"><em>value</em></span>' is converted to an <code class="literal">int</code> <span class="emphasis"><em>result</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack: </p>`,
html: `<p>Instruction d2i: Convert double to int</p><p>Format: d2i</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.d2i.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and converted to an <code class="literal">int</code> <span class="emphasis"><em>result</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack: </p>`,
tooltip: `Convert double to int`,
};
case 'D2L':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.d2l`,
html: `<p>Instruction d2l: Convert double to long</p><p>Format: d2l</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.d2l.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>) resulting in <span class="emphasis"><em>value</em></span>'. Then <span class="emphasis"><em>value</em></span>' is converted to a <code class="literal">long</code>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack: </p>`,
html: `<p>Instruction d2l: Convert double to long</p><p>Format: d2l</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.d2l.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and converted to a <code class="literal">long</code>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack: </p>`,
tooltip: `Convert double to long`,
};
case 'DADD':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dadd`,
html: `<p>Instruction dadd: Add double</p><p>Format: dadd</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dadd.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span>' + <span class="emphasis"><em>value2</em></span>'. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction dadd: Add double</p><p>Format: dadd</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dadd.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span> + <span class="emphasis"><em>value2</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Add double`,
};
case 'DALOAD':
@@ -172,19 +174,19 @@ export function getAsmOpcode(opcode) {
case 'DASTORE':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dastore`,
html: `<p>Instruction dastore: Store into double array </p><p>Format: dastore</p><p>Operand Stack: ..., <span class="emphasis"><em>arrayref</em></span>, <span class="emphasis"><em>index</em></span>, <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dastore.desc-100"></a> The <span class="emphasis"><em>arrayref</em></span> must be of type <code class="literal">reference</code> and must refer to an array whose components are of type <code class="literal">double</code>. The <span class="emphasis"><em>index</em></span> must be of type <code class="literal">int</code>, and value must be of type <code class="literal">double</code>. The <span class="emphasis"><em>arrayref</em></span>, <span class="emphasis"><em>index</em></span>, and <span class="emphasis"><em>value</em></span> are popped from the operand stack. The <code class="literal">double</code> <span class="emphasis"><em>value</em></span> undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>', which is stored as the component of the array indexed by <span class="emphasis"><em>index</em></span>. </p>`,
html: `<p>Instruction dastore: Store into double array </p><p>Format: dastore</p><p>Operand Stack: ..., <span class="emphasis"><em>arrayref</em></span>, <span class="emphasis"><em>index</em></span>, <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dastore.desc-100"></a> The <span class="emphasis"><em>arrayref</em></span> must be of type <code class="literal">reference</code> and must refer to an array whose components are of type <code class="literal">double</code>. The <span class="emphasis"><em>index</em></span> must be of type <code class="literal">int</code>, and value must be of type <code class="literal">double</code>. The <span class="emphasis"><em>arrayref</em></span>, <span class="emphasis"><em>index</em></span>, and <span class="emphasis"><em>value</em></span> are popped from the operand stack. The <code class="literal">double</code> <span class="emphasis"><em>value</em></span> is stored as the component of the array indexed by <span class="emphasis"><em>index</em></span>. </p>`,
tooltip: `Store into double array `,
};
case 'DCMPG':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dcmp_op`,
html: `<p>Instruction dcmpg: Compare double</p><p>Format: dcmp[op]</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dcmp_op.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. A floating-point comparison is performed: </p>`,
html: `<p>Instruction dcmpg: Compare double</p><p>Format: dcmp[op]</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dcmp_op.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack and a floating-point comparison is performed: </p>`,
tooltip: `Compare double`,
};
case 'DCMPL':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dcmp_op`,
html: `<p>Instruction dcmpl: Compare double</p><p>Format: dcmp[op]</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dcmp_op.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. A floating-point comparison is performed: </p>`,
html: `<p>Instruction dcmpl: Compare double</p><p>Format: dcmp[op]</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dcmp_op.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack and a floating-point comparison is performed: </p>`,
tooltip: `Compare double`,
};
case 'DCONST_0':
@@ -202,7 +204,7 @@ export function getAsmOpcode(opcode) {
case 'DDIV':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ddiv`,
html: `<p>Instruction ddiv: Divide double</p><p>Format: ddiv</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.ddiv.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span>' / <span class="emphasis"><em>value2</em></span>'. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction ddiv: Divide double</p><p>Format: ddiv</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.ddiv.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span> / <span class="emphasis"><em>value2</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Divide double`,
};
case 'DLOAD':
@@ -238,61 +240,61 @@ export function getAsmOpcode(opcode) {
case 'DMUL':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dmul`,
html: `<p>Instruction dmul: Multiply double</p><p>Format: dmul</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dmul.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span>' * <span class="emphasis"><em>value2</em></span>'. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction dmul: Multiply double</p><p>Format: dmul</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dmul.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span> * <span class="emphasis"><em>value2</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Multiply double`,
};
case 'DNEG':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dneg`,
html: `<p>Instruction dneg: Negate double</p><p>Format: dneg</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dneg.desc-100"></a> The value must be of type <code class="literal">double</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is the arithmetic negation of <span class="emphasis"><em>value</em></span>'. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction dneg: Negate double</p><p>Format: dneg</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dneg.desc-100"></a> The value must be of type <code class="literal">double</code>. It is popped from the operand stack. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is the arithmetic negation of <span class="emphasis"><em>value</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Negate double`,
};
case 'DREM':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.drem`,
html: `<p>Instruction drem: Remainder double</p><p>Format: drem</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.drem.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is calculated and pushed onto the operand stack. </p>`,
html: `<p>Instruction drem: Remainder double</p><p>Format: drem</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.drem.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is calculated and pushed onto the operand stack. </p>`,
tooltip: `Remainder double`,
};
case 'DRETURN':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dreturn`,
html: `<p>Instruction dreturn: Return double from method </p><p>Format: dreturn</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> [empty]</p><p><a name="jvms-6.5.dreturn.desc-100"></a> The current method must have return type <code class="literal">double</code>. The <span class="emphasis"><em>value</em></span> must be of type <code class="literal">double</code>. If the current method is a <code class="literal">synchronized</code> method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a <span class="emphasis"><em>monitorexit</em></span> instruction (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.monitorexit" title="monitorexit">§<span class="emphasis"><em>monitorexit</em></span></a>) in the current thread. If no exception is thrown, <span class="emphasis"><em>value</em></span> is popped from the operand stack of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>) and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The <span class="emphasis"><em>value</em></span>' is pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded. </p>`,
html: `<p>Instruction dreturn: Return double from method </p><p>Format: dreturn</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> [empty]</p><p><a name="jvms-6.5.dreturn.desc-100"></a> The current method must have return type <code class="literal">double</code>. The <span class="emphasis"><em>value</em></span> must be of type <code class="literal">double</code>. If the current method is a <code class="literal">synchronized</code> method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a <span class="emphasis"><em>monitorexit</em></span> instruction (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.monitorexit" title="monitorexit">§<span class="emphasis"><em>monitorexit</em></span></a>) in the current thread. If no exception is thrown, <span class="emphasis"><em>value</em></span> is popped from the operand stack of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>) and pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded. </p>`,
tooltip: `Return double from method `,
};
case 'DSTORE':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore`,
html: `<p>Instruction dstore: Store double into local variable </p><p>Format: dstore index</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore.desc-100"></a> The <span class="emphasis"><em>index</em></span> is an unsigned byte. Both <span class="emphasis"><em>index</em></span> and <span class="emphasis"><em>index</em></span>+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The local variables at <span class="emphasis"><em>index</em></span> and <span class="emphasis"><em>index</em></span>+1 are set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction dstore: Store double into local variable </p><p>Format: dstore index</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore.desc-100"></a> The <span class="emphasis"><em>index</em></span> is an unsigned byte. Both <span class="emphasis"><em>index</em></span> and <span class="emphasis"><em>index</em></span>+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack. The local variables at <span class="emphasis"><em>index</em></span> and <span class="emphasis"><em>index</em></span>+1 are set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store double into local variable `,
};
case 'DSTORE_0':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore_n`,
html: `<p>Instruction dstore_0: Store double into local variable </p><p>Format: dstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore_n.desc-100"></a> Both &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The local variables at &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 are set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction dstore_0: Store double into local variable </p><p>Format: dstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore_n.desc-100"></a> Both &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack. The local variables at &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 are set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store double into local variable `,
};
case 'DSTORE_1':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore_n`,
html: `<p>Instruction dstore_1: Store double into local variable </p><p>Format: dstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore_n.desc-100"></a> Both &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The local variables at &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 are set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction dstore_1: Store double into local variable </p><p>Format: dstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore_n.desc-100"></a> Both &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack. The local variables at &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 are set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store double into local variable `,
};
case 'DSTORE_2':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore_n`,
html: `<p>Instruction dstore_2: Store double into local variable </p><p>Format: dstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore_n.desc-100"></a> Both &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The local variables at &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 are set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction dstore_2: Store double into local variable </p><p>Format: dstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore_n.desc-100"></a> Both &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack. The local variables at &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 are set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store double into local variable `,
};
case 'DSTORE_3':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore_n`,
html: `<p>Instruction dstore_3: Store double into local variable </p><p>Format: dstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore_n.desc-100"></a> Both &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The local variables at &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 are set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction dstore_3: Store double into local variable </p><p>Format: dstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.dstore_n.desc-100"></a> Both &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 must be indices into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">double</code>. It is popped from the operand stack. The local variables at &lt;<span class="emphasis"><em>n</em></span>&gt; and &lt;<span class="emphasis"><em>n</em></span>&gt;+1 are set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store double into local variable `,
};
case 'DSUB':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dsub`,
html: `<p>Instruction dsub: Subtract double</p><p>Format: dsub</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dsub.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span>' - <span class="emphasis"><em>value2</em></span>'. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction dsub: Subtract double</p><p>Format: dsub</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.dsub.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">double</code>. The values are popped from the operand stack. The <code class="literal">double</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span> - <span class="emphasis"><em>value2</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Subtract double`,
};
case 'DUP':
@@ -334,25 +336,25 @@ export function getAsmOpcode(opcode) {
case 'F2D':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.f2d`,
html: `<p>Instruction f2d: Convert float to double</p><p>Format: f2d</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.f2d.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. Then <span class="emphasis"><em>value</em></span>' is converted to a <code class="literal">double</code> <span class="emphasis"><em>result</em></span>. This <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction f2d: Convert float to double</p><p>Format: f2d</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.f2d.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and converted to a <code class="literal">double</code> <span class="emphasis"><em>result</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Convert float to double`,
};
case 'F2I':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.f2i`,
html: `<p>Instruction f2i: Convert float to int</p><p>Format: f2i</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.f2i.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. Then <span class="emphasis"><em>value</em></span>' is converted to an <code class="literal">int</code> <span class="emphasis"><em>result</em></span>. This <span class="emphasis"><em>result</em></span> is pushed onto the operand stack: </p>`,
html: `<p>Instruction f2i: Convert float to int</p><p>Format: f2i</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.f2i.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and converted to an <code class="literal">int</code> <span class="emphasis"><em>result</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack: </p>`,
tooltip: `Convert float to int`,
};
case 'F2L':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.f2l`,
html: `<p>Instruction f2l: Convert float to long</p><p>Format: f2l</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.f2l.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. Then <span class="emphasis"><em>value</em></span>' is converted to a <code class="literal">long</code> <span class="emphasis"><em>result</em></span>. This <span class="emphasis"><em>result</em></span> is pushed onto the operand stack: </p>`,
html: `<p>Instruction f2l: Convert float to long</p><p>Format: f2l</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.f2l.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and converted to a <code class="literal">long</code> <span class="emphasis"><em>result</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack: </p>`,
tooltip: `Convert float to long`,
};
case 'FADD':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fadd`,
html: `<p>Instruction fadd: Add float</p><p>Format: fadd</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fadd.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span>' + <span class="emphasis"><em>value2</em></span>'. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction fadd: Add float</p><p>Format: fadd</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fadd.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span> + <span class="emphasis"><em>value2</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Add float`,
};
case 'FALOAD':
@@ -364,19 +366,19 @@ export function getAsmOpcode(opcode) {
case 'FASTORE':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fastore`,
html: `<p>Instruction fastore: Store into float array </p><p>Format: fastore</p><p>Operand Stack: ..., <span class="emphasis"><em>arrayref</em></span>, <span class="emphasis"><em>index</em></span>, <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fastore.desc-100"></a> The <span class="emphasis"><em>arrayref</em></span> must be of type <code class="literal">reference</code> and must refer to an array whose components are of type <code class="literal">float</code>. The <span class="emphasis"><em>index</em></span> must be of type <code class="literal">int</code>, and the <span class="emphasis"><em>value</em></span> must be of type <code class="literal">float</code>. The <span class="emphasis"><em>arrayref</em></span>, <span class="emphasis"><em>index</em></span>, and <span class="emphasis"><em>value</em></span> are popped from the operand stack. The <code class="literal">float</code> <span class="emphasis"><em>value</em></span> undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>', and <span class="emphasis"><em>value</em></span>' is stored as the component of the array indexed by <span class="emphasis"><em>index</em></span>. </p>`,
html: `<p>Instruction fastore: Store into float array </p><p>Format: fastore</p><p>Operand Stack: ..., <span class="emphasis"><em>arrayref</em></span>, <span class="emphasis"><em>index</em></span>, <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fastore.desc-100"></a> The <span class="emphasis"><em>arrayref</em></span> must be of type <code class="literal">reference</code> and must refer to an array whose components are of type <code class="literal">float</code>. The <span class="emphasis"><em>index</em></span> must be of type <code class="literal">int</code>, and the <span class="emphasis"><em>value</em></span> must be of type <code class="literal">float</code>. The <span class="emphasis"><em>arrayref</em></span>, <span class="emphasis"><em>index</em></span>, and <span class="emphasis"><em>value</em></span> are popped from the operand stack. The <code class="literal">float</code> <span class="emphasis"><em>value</em></span> is stored as the component of the array indexed by <span class="emphasis"><em>index</em></span>. </p>`,
tooltip: `Store into float array `,
};
case 'FCMPG':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fcmp_op`,
html: `<p>Instruction fcmpg: Compare float</p><p>Format: fcmp[op]</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fcmp_op.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. A floating-point comparison is performed: </p>`,
html: `<p>Instruction fcmpg: Compare float</p><p>Format: fcmp[op]</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fcmp_op.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack and a floating-point comparison is performed: </p>`,
tooltip: `Compare float`,
};
case 'FCMPL':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fcmp_op`,
html: `<p>Instruction fcmpl: Compare float</p><p>Format: fcmp[op]</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fcmp_op.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. A floating-point comparison is performed: </p>`,
html: `<p>Instruction fcmpl: Compare float</p><p>Format: fcmp[op]</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fcmp_op.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack and a floating-point comparison is performed: </p>`,
tooltip: `Compare float`,
};
case 'FCONST_0, 1':
@@ -394,7 +396,7 @@ export function getAsmOpcode(opcode) {
case 'FDIV':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fdiv`,
html: `<p>Instruction fdiv: Divide float</p><p>Format: fdiv</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fdiv.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span>' / <span class="emphasis"><em>value2</em></span>'. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction fdiv: Divide float</p><p>Format: fdiv</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fdiv.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span> / <span class="emphasis"><em>value2</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Divide float`,
};
case 'FLOAD':
@@ -430,61 +432,61 @@ export function getAsmOpcode(opcode) {
case 'FMUL':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fmul`,
html: `<p>Instruction fmul: Multiply float</p><p>Format: fmul</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fmul.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span>' * <span class="emphasis"><em>value2</em></span>'. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction fmul: Multiply float</p><p>Format: fmul</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fmul.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span> * <span class="emphasis"><em>value2</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Multiply float`,
};
case 'FNEG':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fneg`,
html: `<p>Instruction fneg: Negate float</p><p>Format: fneg</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fneg.desc-100"></a> The <span class="emphasis"><em>value</em></span> must be of type <code class="literal">float</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is the arithmetic negation of <span class="emphasis"><em>value</em></span>'. This <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction fneg: Negate float</p><p>Format: fneg</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fneg.desc-100"></a> The <span class="emphasis"><em>value</em></span> must be of type <code class="literal">float</code>. It is popped from the operand stack. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is the arithmetic negation of <span class="emphasis"><em>value</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Negate float`,
};
case 'FREM':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.frem`,
html: `<p>Instruction frem: Remainder float</p><p>Format: frem</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.frem.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is calculated and pushed onto the operand stack. </p>`,
html: `<p>Instruction frem: Remainder float</p><p>Format: frem</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.frem.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is calculated and pushed onto the operand stack. </p>`,
tooltip: `Remainder float`,
};
case 'FRETURN':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.freturn`,
html: `<p>Instruction freturn: Return float from method </p><p>Format: freturn</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> [empty]</p><p><a name="jvms-6.5.freturn.desc-100"></a> The current method must have return type <code class="literal">float</code>. The <span class="emphasis"><em>value</em></span> must be of type <code class="literal">float</code>. If the current method is a <code class="literal">synchronized</code> method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a <span class="emphasis"><em>monitorexit</em></span> instruction (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.monitorexit" title="monitorexit">§<span class="emphasis"><em>monitorexit</em></span></a>) in the current thread. If no exception is thrown, <span class="emphasis"><em>value</em></span> is popped from the operand stack of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>) and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The <span class="emphasis"><em>value</em></span>' is pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded. </p>`,
html: `<p>Instruction freturn: Return float from method </p><p>Format: freturn</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> [empty]</p><p><a name="jvms-6.5.freturn.desc-100"></a> The current method must have return type <code class="literal">float</code>. The <span class="emphasis"><em>value</em></span> must be of type <code class="literal">float</code>. If the current method is a <code class="literal">synchronized</code> method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a <span class="emphasis"><em>monitorexit</em></span> instruction (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.monitorexit" title="monitorexit">§<span class="emphasis"><em>monitorexit</em></span></a>) in the current thread. If no exception is thrown, <span class="emphasis"><em>value</em></span> is popped from the operand stack of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>) and pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded. </p>`,
tooltip: `Return float from method `,
};
case 'FSTORE':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore`,
html: `<p>Instruction fstore: Store float into local variable </p><p>Format: fstore index</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore.desc-100"></a> The <span class="emphasis"><em>index</em></span> is an unsigned byte that must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The value of the local variable at <span class="emphasis"><em>index</em></span> is set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction fstore: Store float into local variable </p><p>Format: fstore index</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore.desc-100"></a> The <span class="emphasis"><em>index</em></span> is an unsigned byte that must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack, and the value of the local variable at <span class="emphasis"><em>index</em></span> is set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store float into local variable `,
};
case 'FSTORE_0':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore_n`,
html: `<p>Instruction fstore_0: Store float into local variable </p><p>Format: fstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore_n.desc-100"></a> The &lt;<span class="emphasis"><em>n</em></span>&gt; must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The value of the local variable at &lt;<span class="emphasis"><em>n</em></span>&gt; is set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction fstore_0: Store float into local variable </p><p>Format: fstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore_n.desc-100"></a> The &lt;<span class="emphasis"><em>n</em></span>&gt; must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack, and the value of the local variable at &lt;<span class="emphasis"><em>n</em></span>&gt; is set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store float into local variable `,
};
case 'FSTORE_1':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore_n`,
html: `<p>Instruction fstore_1: Store float into local variable </p><p>Format: fstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore_n.desc-100"></a> The &lt;<span class="emphasis"><em>n</em></span>&gt; must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The value of the local variable at &lt;<span class="emphasis"><em>n</em></span>&gt; is set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction fstore_1: Store float into local variable </p><p>Format: fstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore_n.desc-100"></a> The &lt;<span class="emphasis"><em>n</em></span>&gt; must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack, and the value of the local variable at &lt;<span class="emphasis"><em>n</em></span>&gt; is set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store float into local variable `,
};
case 'FSTORE_2':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore_n`,
html: `<p>Instruction fstore_2: Store float into local variable </p><p>Format: fstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore_n.desc-100"></a> The &lt;<span class="emphasis"><em>n</em></span>&gt; must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The value of the local variable at &lt;<span class="emphasis"><em>n</em></span>&gt; is set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction fstore_2: Store float into local variable </p><p>Format: fstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore_n.desc-100"></a> The &lt;<span class="emphasis"><em>n</em></span>&gt; must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack, and the value of the local variable at &lt;<span class="emphasis"><em>n</em></span>&gt; is set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store float into local variable `,
};
case 'FSTORE_3':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore_n`,
html: `<p>Instruction fstore_3: Store float into local variable </p><p>Format: fstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore_n.desc-100"></a> The &lt;<span class="emphasis"><em>n</em></span>&gt; must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack and undergoes value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value</em></span>'. The value of the local variable at &lt;<span class="emphasis"><em>n</em></span>&gt; is set to <span class="emphasis"><em>value</em></span>'. </p>`,
html: `<p>Instruction fstore_3: Store float into local variable </p><p>Format: fstore_[n]</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ...</p><p><a name="jvms-6.5.fstore_n.desc-100"></a> The &lt;<span class="emphasis"><em>n</em></span>&gt; must be an index into the local variable array of the current frame (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.6" title="2.6.&nbsp;Frames">§2.6</a>). The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">float</code>. It is popped from the operand stack, and the value of the local variable at &lt;<span class="emphasis"><em>n</em></span>&gt; is set to <span class="emphasis"><em>value</em></span>. </p>`,
tooltip: `Store float into local variable `,
};
case 'FSUB':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fsub`,
html: `<p>Instruction fsub: Subtract float</p><p>Format: fsub</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fsub.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack and undergo value set conversion (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8.3" title="2.8.3.&nbsp;Value Set Conversion">§2.8.3</a>), resulting in <span class="emphasis"><em>value1</em></span>' and <span class="emphasis"><em>value2</em></span>'. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span>' - <span class="emphasis"><em>value2</em></span>'. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction fsub: Subtract float</p><p>Format: fsub</p><p>Operand Stack: ..., <span class="emphasis"><em>value1</em></span>, <span class="emphasis"><em>value2</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.fsub.desc-100"></a> Both <span class="emphasis"><em>value1</em></span> and <span class="emphasis"><em>value2</em></span> must be of type <code class="literal">float</code>. The values are popped from the operand stack. The <code class="literal">float</code> <span class="emphasis"><em>result</em></span> is <span class="emphasis"><em>value1</em></span> - <span class="emphasis"><em>value2</em></span>. The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Subtract float`,
};
case 'GETFIELD':
@@ -532,7 +534,7 @@ export function getAsmOpcode(opcode) {
case 'I2F':
return {
url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.i2f`,
html: `<p>Instruction i2f: Convert int to float</p><p>Format: i2f</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.i2f.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">int</code>. It is popped from the operand stack and converted to the <code class="literal">float</code> <span class="emphasis"><em>result</em></span> using the round to nearest rounding policy (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8" title="2.8.&nbsp;Floating-Point Arithmetic">§2.8</a>). The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
html: `<p>Instruction i2f: Convert int to float</p><p>Format: i2f</p><p>Operand Stack: ..., <span class="emphasis"><em>value</em></span> <span class="symbol">→</span> ..., <span class="emphasis"><em>result</em></span></p><p><a name="jvms-6.5.i2f.desc-100"></a> The <span class="emphasis"><em>value</em></span> on the top of the operand stack must be of type <code class="literal">int</code>. It is popped from the operand stack and converted to a <code class="literal">float</code> <span class="emphasis"><em>result</em></span> using the round to nearest rounding policy (<a class="xref" href="https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-2.html#jvms-2.8" title="2.8.&nbsp;Floating-Point Arithmetic">§2.8</a>). The <span class="emphasis"><em>result</em></span> is pushed onto the operand stack. </p>`,
tooltip: `Convert int to float`,
};
case 'I2L':

File diff suppressed because it is too large Load Diff

397
lib/asm-docs/generated/asm-docs-llvm.ts generated Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,6 @@
import {AssemblyInstructionInfo} from '../base';
export function getAsmOpcode(opcode) {
export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined {
if (!opcode) return;
switch (opcode.toUpperCase()) {
case "ASYNC_GEN_WRAP":