aboutsummaryrefslogtreecommitdiff
path: root/lib/asm-docs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/asm-docs')
-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
4 files changed, 48 insertions, 62 deletions
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