aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Godbolt <matt@godbolt.org>2023-05-30 21:06:54 -0500
committerMatt Godbolt <matt@godbolt.org>2023-05-30 21:06:54 -0500
commitbeec3b51d49254e140feb1b8792c2f8ace08a1e5 (patch)
tree8c56f0cac95ab83009475b1efb8b5ffb976c24ce
parent1275dca94b436007048cd9a1dd17833df551ea04 (diff)
downloadcompiler-explorer-beec3b51d49254e140feb1b8792c2f8ace08a1e5.tar.gz
compiler-explorer-beec3b51d49254e140feb1b8792c2f8ace08a1e5.zip
Refactor; rename arm64 to aarch64gh-7511
-rw-r--r--etc/scripts/docenizers/.gitignore2
-rw-r--r--etc/scripts/docenizers/Makefile55
-rw-r--r--etc/scripts/docenizers/aarch64.json (renamed from etc/scripts/docenizers/arm64.json)0
-rw-r--r--lib/asm-docs/_all.ts3
-rw-r--r--lib/asm-docs/arm.ts (renamed from lib/asm-docs/arm32.ts)71
-rw-r--r--lib/asm-docs/arm64.ts36
-rw-r--r--lib/asm-docs/generated/asm-docs-aarch64.ts (renamed from lib/asm-docs/generated/asm-docs-arm64.ts)0
7 files changed, 77 insertions, 90 deletions
diff --git a/etc/scripts/docenizers/.gitignore b/etc/scripts/docenizers/.gitignore
index cdf469217..bdf8747c5 100644
--- a/etc/scripts/docenizers/.gitignore
+++ b/etc/scripts/docenizers/.gitignore
@@ -1,6 +1,6 @@
asm-docs
asm-docs-arm32
-asm-docs-arm64
+asm-docs-aarch64
evm-inst-docs
python-inst-docs
vendor/*.html
diff --git a/etc/scripts/docenizers/Makefile b/etc/scripts/docenizers/Makefile
index 4145305ba..fade14c8e 100644
--- a/etc/scripts/docenizers/Makefile
+++ b/etc/scripts/docenizers/Makefile
@@ -1,29 +1,30 @@
+GEN_DIR := ../../../lib/asm-docs/generated
all: \
- ../../../lib/asm-docs/generated/asm-docs-6502.ts \
- ../../../lib/asm-docs/generated/asm-docs-amd64.ts \
- ../../../lib/asm-docs/generated/asm-docs-arm32.ts \
- ../../../lib/asm-docs/generated/asm-docs-arm64.ts \
- ../../../lib/asm-docs/generated/asm-docs-avr.ts \
- ../../../lib/asm-docs/generated/asm-docs-evm.ts \
- ../../../lib/asm-docs/generated/asm-docs-java.ts \
- ../../../lib/asm-docs/generated/asm-docs-llvm.ts \
- ../../../lib/asm-docs/generated/asm-docs-python.ts
+ $(GEN_DIR)/asm-docs-6502.ts \
+ $(GEN_DIR)/asm-docs-amd64.ts \
+ $(GEN_DIR)/asm-docs-arm32.ts \
+ $(GEN_DIR)/asm-docs-aarch64.ts \
+ $(GEN_DIR)/asm-docs-avr.ts \
+ $(GEN_DIR)/asm-docs-evm.ts \
+ $(GEN_DIR)/asm-docs-java.ts \
+ $(GEN_DIR)/asm-docs-llvm.ts \
+ $(GEN_DIR)/asm-docs-python.ts
-../../../lib/asm-docs/generated/asm-docs-6502.ts: docenizer-6502.py
- python3 docenizer-6502.py
-../../../lib/asm-docs/generated/asm-docs-amd64.ts: docenizer-amd64.py
- python3 docenizer-amd64.py -o ../../../lib/asm-docs/generated/asm-docs-amd64.ts
-../../../lib/asm-docs/generated/asm-docs-arm32.ts: docenizer-arm.py arm32.json
- python3 docenizer-arm.py -o ../../../lib/asm-docs/generated/asm-docs-arm32.ts -c arm32.json -d asm-docs-arm32 -i asm-docs-arm32
-../../../lib/asm-docs/generated/asm-docs-arm64.ts: docenizer-arm.py arm64.json
- python3 docenizer-arm.py -o ../../../lib/asm-docs/generated/asm-docs-arm64.ts -c arm64.json -d asm-docs-arm64 -i asm-docs-arm64
-../../../lib/asm-docs/generated/asm-docs-avr.ts: docenizer-avr.py
- python3 docenizer-avr.py
-../../../lib/asm-docs/generated/asm-docs-evm.ts: docenizer-evm.py
- python3 docenizer-evm.py -o ../../../lib/asm-docs/generated/asm-docs-evm.ts
-../../../lib/asm-docs/generated/asm-docs-java.ts: docenizer-java.sh docenizer-java.js
- ./docenizer-java.sh
-../../../lib/asm-docs/generated/asm-docs-llvm.ts: docenizer-llvm.sh docenizer-llvm.ts
- ./docenizer-llvm.sh
-../../../lib/asm-docs/generated/asm-docs-python.ts: docenizer-python.py
- python3 docenizer-python.py -o ../../../lib/asm-docs/generated/asm-docs-python.ts
+$(GEN_DIR)/asm-docs-6502.ts: docenizer-6502.py
+ python3 $<
+$(GEN_DIR)/asm-docs-amd64.ts: docenizer-amd64.py
+ python3 $< -o $@
+$(GEN_DIR)/asm-docs-arm32.ts: docenizer-arm.py arm32.json
+ python3 $< -o $@ -c arm32.json -d asm-docs-arm32 -i asm-docs-arm32
+$(GEN_DIR)/asm-docs-aarch64.ts: docenizer-arm.py aarch64.json
+ python3 $< -o $@ -c aarch64.json -d asm-docs-aarch64 -i asm-docs-aarch64
+$(GEN_DIR)/asm-docs-avr.ts: docenizer-avr.py
+ python3 $<
+$(GEN_DIR)/asm-docs-evm.ts: docenizer-evm.py
+ python3 $< -o $@
+$(GEN_DIR)/asm-docs-java.ts: docenizer-java.sh docenizer-java.ts
+ $<
+$(GEN_DIR)/asm-docs-llvm.ts: docenizer-llvm.sh docenizer-llvm.ts
+ $<
+$(GEN_DIR)/asm-docs-python.ts: docenizer-python.py
+ python3 $< -o $@
diff --git a/etc/scripts/docenizers/arm64.json b/etc/scripts/docenizers/aarch64.json
index 045b1aac3..045b1aac3 100644
--- a/etc/scripts/docenizers/arm64.json
+++ b/etc/scripts/docenizers/aarch64.json
diff --git a/lib/asm-docs/_all.ts b/lib/asm-docs/_all.ts
index d447dc0c4..821ad1c74 100644
--- a/lib/asm-docs/_all.ts
+++ b/lib/asm-docs/_all.ts
@@ -23,8 +23,7 @@
// POSSIBILITY OF SUCH DAMAGE.
export {Amd64DocumentationProvider} from './amd64.js';
-export {Arm32DocumentationProvider} from './arm32.js';
-export {Arm64DocumentationProvider} from './arm64.js';
+export {Arm32DocumentationProvider, ArmArch64DocumentationProvider} from './arm.js';
export {AvrDocumentationProvider} from './avr.js';
export {EvmDocumentationProvider} from './evm.js';
export {JavaDocumentationProvider} from './java.js';
diff --git a/lib/asm-docs/arm32.ts b/lib/asm-docs/arm.ts
index f2fa874df..7f4ea695b 100644
--- a/lib/asm-docs/arm32.ts
+++ b/lib/asm-docs/arm.ts
@@ -23,46 +23,49 @@
// POSSIBILITY OF SUCH DAMAGE.
import {AssemblyInstructionInfo, BaseAssemblyDocumentationProvider} from './base.js';
-import {getAsmOpcode} from './generated/asm-docs-arm32.js';
+import {getAsmOpcode as getAsmOpcode32} from './generated/asm-docs-arm32.js';
+import {getAsmOpcode as getAsmOpcode64} from './generated/asm-docs-aarch64.js';
-export class Arm32DocumentationProvider extends BaseAssemblyDocumentationProvider {
+abstract class ArmBaseDocumentationProvider extends BaseAssemblyDocumentationProvider {
private static readonly CONDITIONAL_INSTRUCTION_REGEXP =
/^([A-Za-z]+?)(EQ|NE|CS|CC|MI|PL|VS|VC|HI|LS|GE|LT|GT|LE|AL)$/;
- public static get key() {
- return 'arm32';
- }
+
public override getInstructionInformation(instruction: string): AssemblyInstructionInfo | null {
- const info = getAsmOpcode(instruction) || Arm32DocumentationProvider.getConditionalOpcode(instruction);
+ const info = this.getAsmOpcode(instruction) || this.getConditionalOpcode(instruction);
return info || null;
}
private static readonly CONDITIONAL_OPCODE_TAGS: Record<string, string> = {
- EQ: 'If equal, ',
- NE: 'If not equal, ',
- CS: 'If carry set, ',
- CC: 'If carry clear, ',
- MI: 'If negative, ',
- PL: 'If positive or zero, ',
- VS: 'If overflow, ',
- VC: 'If no overflow, ',
- HI: 'If unsigned higher, ',
- LS: 'If unsigned lower or same, ',
- GE: 'If signed greater than or equal, ',
- LT: 'If signed less than, ',
- GT: 'If signed greater than, ',
- LE: 'If signed less than or equal, ',
+ EQ: 'equal',
+ NE: 'not equal',
+ CS: 'carry set',
+ CC: 'carry clear',
+ MI: 'negative',
+ PL: 'positive or zero',
+ VS: 'overflow',
+ VC: 'no overflow',
+ HI: 'unsigned higher',
+ LS: 'unsigned lower or same',
+ GE: 'signed greater than or equal',
+ LT: 'signed less than',
+ GT: 'signed greater than',
+ LE: 'signed less than or equal',
};
+ protected abstract getAsmOpcode(opcode: string): AssemblyInstructionInfo | undefined;
+
/** Add additional notes for conditional instructions */
- private static getConditionalOpcode(instruction: string): AssemblyInstructionInfo | null {
+ private getConditionalOpcode(instruction: string): AssemblyInstructionInfo | null {
// If the instruction is a conditional instruction
- const isConditionalOpcode = instruction.match(Arm32DocumentationProvider.CONDITIONAL_INSTRUCTION_REGEXP);
+ const isConditionalOpcode = instruction
+ .match(ArmBaseDocumentationProvider.CONDITIONAL_INSTRUCTION_REGEXP);
if (!isConditionalOpcode) {
return null;
}
- const information = getAsmOpcode(isConditionalOpcode[1]);
+ const information = this.getAsmOpcode(isConditionalOpcode[1]);
if (!information) return null;
- const text = Arm32DocumentationProvider.CONDITIONAL_OPCODE_TAGS[isConditionalOpcode[2]] || '';
+ const maybeCondition = ArmBaseDocumentationProvider.CONDITIONAL_OPCODE_TAGS[isConditionalOpcode[2]];
+ const text = maybeCondition ? `If ${maybeCondition}: ` : '';
return {
...information,
tooltip: text + information.tooltip,
@@ -70,3 +73,23 @@ export class Arm32DocumentationProvider extends BaseAssemblyDocumentationProvide
};
}
}
+
+export class Arm32DocumentationProvider extends ArmBaseDocumentationProvider {
+ public static get key() {
+ return 'arm32';
+ }
+
+ protected getAsmOpcode(opcode: string): AssemblyInstructionInfo | undefined {
+ return getAsmOpcode32(opcode);
+ }
+}
+
+export class ArmArch64DocumentationProvider extends ArmBaseDocumentationProvider {
+ public static get key() {
+ return 'aarch64';
+ }
+
+ protected getAsmOpcode(opcode: string): AssemblyInstructionInfo | undefined {
+ return getAsmOpcode64(opcode);
+ }
+}
diff --git a/lib/asm-docs/arm64.ts b/lib/asm-docs/arm64.ts
deleted file mode 100644
index 117394781..000000000
--- a/lib/asm-docs/arm64.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2021, Compiler Explorer Authors
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-
-import {AssemblyInstructionInfo, BaseAssemblyDocumentationProvider} from './base.js';
-import {getAsmOpcode} from './generated/asm-docs-arm64.js';
-
-export class Arm64DocumentationProvider extends BaseAssemblyDocumentationProvider {
- public static get key() {
- return 'arm64';
- }
- public override getInstructionInformation(instruction: string): AssemblyInstructionInfo | null {
- const info = getAsmOpcode(instruction);
- return info || null;
- }
-}
diff --git a/lib/asm-docs/generated/asm-docs-arm64.ts b/lib/asm-docs/generated/asm-docs-aarch64.ts
index afc0c8d75..afc0c8d75 100644
--- a/lib/asm-docs/generated/asm-docs-arm64.ts
+++ b/lib/asm-docs/generated/asm-docs-aarch64.ts