@jhlagado/azm 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -78
- package/dist/src/api-compile.d.ts +0 -2
- package/dist/src/api-compile.js +2 -9
- package/dist/src/assembly/address-planning.js +21 -1
- package/dist/src/assembly/program-emission.js +1 -0
- package/dist/src/cli/parse-args.d.ts +0 -1
- package/dist/src/cli/parse-args.js +0 -7
- package/dist/src/cli/write-artifacts.js +0 -11
- package/dist/src/core/compile.js +192 -9
- package/dist/src/expansion/op-expansion.js +2 -0
- package/dist/src/model/expression.d.ts +4 -0
- package/dist/src/model/source-item.d.ts +11 -0
- package/dist/src/outputs/index.js +0 -2
- package/dist/src/outputs/types.d.ts +3 -16
- package/dist/src/outputs/write-asm80.js +206 -5
- package/dist/src/register-care/analyze.js +36 -8
- package/dist/src/register-care/annotations.js +33 -146
- package/dist/src/register-care/fix.d.ts +2 -0
- package/dist/src/register-care/fix.js +52 -0
- package/dist/src/register-care/instruction-shape.d.ts +11 -0
- package/dist/src/register-care/instruction-shape.js +129 -0
- package/dist/src/register-care/liveness.js +15 -7
- package/dist/src/register-care/profiles.js +4 -0
- package/dist/src/register-care/programModel.js +79 -13
- package/dist/src/register-care/report.d.ts +2 -1
- package/dist/src/register-care/report.js +91 -34
- package/dist/src/register-care/routine-summaries.d.ts +6 -0
- package/dist/src/register-care/routine-summaries.js +89 -0
- package/dist/src/register-care/summaries.d.ts +3 -3
- package/dist/src/register-care/summaries.js +42 -75
- package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.js +33 -51
- package/dist/src/register-care/types.d.ts +6 -1
- package/dist/src/semantics/expression-evaluation.d.ts +7 -3
- package/dist/src/semantics/expression-evaluation.js +57 -0
- package/dist/src/source/strip-line-comment.d.ts +2 -0
- package/dist/src/source/strip-line-comment.js +26 -0
- package/dist/src/syntax/directive-aliases.js +9 -10
- package/dist/src/syntax/parse-diagnostics.d.ts +12 -0
- package/dist/src/syntax/parse-diagnostics.js +18 -0
- package/dist/src/syntax/parse-expression.js +34 -9
- package/dist/src/syntax/parse-line.js +150 -54
- package/dist/src/tooling/case-style.js +3 -0
- package/docs/reference/cli.md +6 -4
- package/docs/reference/tooling-api.md +13 -9
- package/package.json +4 -6
- package/dist/legacy-root-azm/src/analysis.d.ts +0 -11
- package/dist/legacy-root-azm/src/analysis.js +0 -41
- package/dist/legacy-root-azm/src/compile.d.ts +0 -10
- package/dist/legacy-root-azm/src/compile.js +0 -186
- package/dist/legacy-root-azm/src/compileShared.d.ts +0 -3
- package/dist/legacy-root-azm/src/compileShared.js +0 -7
- package/dist/legacy-root-azm/src/diagnosticTypes.d.ts +0 -77
- package/dist/legacy-root-azm/src/diagnosticTypes.js +0 -53
- package/dist/legacy-root-azm/src/formats/index.d.ts +0 -7
- package/dist/legacy-root-azm/src/formats/index.js +0 -17
- package/dist/legacy-root-azm/src/formats/range.d.ts +0 -17
- package/dist/legacy-root-azm/src/formats/range.js +0 -45
- package/dist/legacy-root-azm/src/formats/types.d.ts +0 -283
- package/dist/legacy-root-azm/src/formats/types.js +0 -1
- package/dist/legacy-root-azm/src/formats/writeAsm80.d.ts +0 -6
- package/dist/legacy-root-azm/src/formats/writeAsm80.js +0 -86
- package/dist/legacy-root-azm/src/formats/writeBin.d.ts +0 -7
- package/dist/legacy-root-azm/src/formats/writeBin.js +0 -23
- package/dist/legacy-root-azm/src/formats/writeD8m.d.ts +0 -9
- package/dist/legacy-root-azm/src/formats/writeD8m.js +0 -245
- package/dist/legacy-root-azm/src/formats/writeHex.d.ts +0 -8
- package/dist/legacy-root-azm/src/formats/writeHex.js +0 -38
- package/dist/legacy-root-azm/src/formats/writeListing.d.ts +0 -8
- package/dist/legacy-root-azm/src/formats/writeListing.js +0 -83
- package/dist/legacy-root-azm/src/frontend/asm80/asmLine.d.ts +0 -39
- package/dist/legacy-root-azm/src/frontend/asm80/asmLine.js +0 -89
- package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.d.ts +0 -4
- package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.js +0 -94
- package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.d.ts +0 -10
- package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.js +0 -25
- package/dist/legacy-root-azm/src/frontend/ast.d.ts +0 -376
- package/dist/legacy-root-azm/src/frontend/ast.js +0 -1
- package/dist/legacy-root-azm/src/frontend/directiveAliases.d.ts +0 -14
- package/dist/legacy-root-azm/src/frontend/directiveAliases.js +0 -189
- package/dist/legacy-root-azm/src/frontend/grammarData.d.ts +0 -14
- package/dist/legacy-root-azm/src/frontend/grammarData.js +0 -65
- package/dist/legacy-root-azm/src/frontend/immExprUtils.d.ts +0 -2
- package/dist/legacy-root-azm/src/frontend/immExprUtils.js +0 -12
- package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.d.ts +0 -17
- package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.js +0 -187
- package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.d.ts +0 -3
- package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.js +0 -73
- package/dist/legacy-root-azm/src/frontend/parseAsmStatements.d.ts +0 -6
- package/dist/legacy-root-azm/src/frontend/parseAsmStatements.js +0 -16
- package/dist/legacy-root-azm/src/frontend/parseAsmStream.d.ts +0 -10
- package/dist/legacy-root-azm/src/frontend/parseAsmStream.js +0 -33
- package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.d.ts +0 -18
- package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.js +0 -34
- package/dist/legacy-root-azm/src/frontend/parseDiagnostics.d.ts +0 -9
- package/dist/legacy-root-azm/src/frontend/parseDiagnostics.js +0 -16
- package/dist/legacy-root-azm/src/frontend/parseEnum.d.ts +0 -12
- package/dist/legacy-root-azm/src/frontend/parseEnum.js +0 -70
- package/dist/legacy-root-azm/src/frontend/parseImm.d.ts +0 -10
- package/dist/legacy-root-azm/src/frontend/parseImm.js +0 -397
- package/dist/legacy-root-azm/src/frontend/parseLogicalLines.d.ts +0 -11
- package/dist/legacy-root-azm/src/frontend/parseLogicalLines.js +0 -94
- package/dist/legacy-root-azm/src/frontend/parseOp.d.ts +0 -25
- package/dist/legacy-root-azm/src/frontend/parseOp.js +0 -120
- package/dist/legacy-root-azm/src/frontend/parseOpHeader.d.ts +0 -20
- package/dist/legacy-root-azm/src/frontend/parseOpHeader.js +0 -32
- package/dist/legacy-root-azm/src/frontend/parseOperands.d.ts +0 -4
- package/dist/legacy-root-azm/src/frontend/parseOperands.js +0 -290
- package/dist/legacy-root-azm/src/frontend/parseParams.d.ts +0 -6
- package/dist/legacy-root-azm/src/frontend/parseParams.js +0 -62
- package/dist/legacy-root-azm/src/frontend/parseParserRecovery.d.ts +0 -12
- package/dist/legacy-root-azm/src/frontend/parseParserRecovery.js +0 -17
- package/dist/legacy-root-azm/src/frontend/parseParserShared.d.ts +0 -2
- package/dist/legacy-root-azm/src/frontend/parseParserShared.js +0 -8
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.d.ts +0 -1
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.js +0 -3
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.d.ts +0 -7
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.js +0 -142
- package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.d.ts +0 -34
- package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.js +0 -177
- package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.d.ts +0 -46
- package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.js +0 -53
- package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.d.ts +0 -16
- package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.js +0 -68
- package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.d.ts +0 -11
- package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.js +0 -50
- package/dist/legacy-root-azm/src/frontend/parseTypes.d.ts +0 -24
- package/dist/legacy-root-azm/src/frontend/parseTypes.js +0 -77
- package/dist/legacy-root-azm/src/frontend/parser.d.ts +0 -11
- package/dist/legacy-root-azm/src/frontend/parser.js +0 -88
- package/dist/legacy-root-azm/src/frontend/source.d.ts +0 -28
- package/dist/legacy-root-azm/src/frontend/source.js +0 -58
- package/dist/legacy-root-azm/src/frontend/sourceExtensions.d.ts +0 -2
- package/dist/legacy-root-azm/src/frontend/sourceExtensions.js +0 -6
- package/dist/legacy-root-azm/src/lintCaseStyle.d.ts +0 -4
- package/dist/legacy-root-azm/src/lintCaseStyle.js +0 -129
- package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.js +0 -229
- package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.d.ts +0 -47
- package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.js +0 -52
- package/dist/legacy-root-azm/src/lowering/asmEquResolution.d.ts +0 -8
- package/dist/legacy-root-azm/src/lowering/asmEquResolution.js +0 -69
- package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.js +0 -102
- package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.d.ts +0 -5
- package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.js +0 -54
- package/dist/legacy-root-azm/src/lowering/asmInstructionStream.d.ts +0 -46
- package/dist/legacy-root-azm/src/lowering/asmInstructionStream.js +0 -51
- package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.d.ts +0 -43
- package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.js +0 -254
- package/dist/legacy-root-azm/src/lowering/asmLoweringHost.d.ts +0 -23
- package/dist/legacy-root-azm/src/lowering/asmLoweringHost.js +0 -1
- package/dist/legacy-root-azm/src/lowering/asmLoweringLd.d.ts +0 -28
- package/dist/legacy-root-azm/src/lowering/asmLoweringLd.js +0 -144
- package/dist/legacy-root-azm/src/lowering/asmRangeLowering.d.ts +0 -17
- package/dist/legacy-root-azm/src/lowering/asmRangeLowering.js +0 -39
- package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.d.ts +0 -16
- package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.js +0 -209
- package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.js +0 -9
- package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.js +0 -14
- package/dist/legacy-root-azm/src/lowering/asmUtils.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/asmUtils.js +0 -105
- package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.d.ts +0 -54
- package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.js +0 -128
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.d.ts +0 -151
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.js +0 -16
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.js +0 -75
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.d.ts +0 -66
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.js +0 -166
- package/dist/legacy-root-azm/src/lowering/bytePlacement.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/bytePlacement.js +0 -37
- package/dist/legacy-root-azm/src/lowering/capabilities.d.ts +0 -67
- package/dist/legacy-root-azm/src/lowering/capabilities.js +0 -1
- package/dist/legacy-root-azm/src/lowering/eaResolution.d.ts +0 -58
- package/dist/legacy-root-azm/src/lowering/eaResolution.js +0 -159
- package/dist/legacy-root-azm/src/lowering/emissionCore.d.ts +0 -17
- package/dist/legacy-root-azm/src/lowering/emissionCore.js +0 -21
- package/dist/legacy-root-azm/src/lowering/emit.d.ts +0 -17
- package/dist/legacy-root-azm/src/lowering/emit.js +0 -46
- package/dist/legacy-root-azm/src/lowering/emitContextBuilder.d.ts +0 -63
- package/dist/legacy-root-azm/src/lowering/emitContextBuilder.js +0 -41
- package/dist/legacy-root-azm/src/lowering/emitFinalization.d.ts +0 -61
- package/dist/legacy-root-azm/src/lowering/emitFinalization.js +0 -66
- package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.d.ts +0 -19
- package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.js +0 -26
- package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.js +0 -119
- package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.js +0 -12
- package/dist/legacy-root-azm/src/lowering/emitPhase1Types.d.ts +0 -21
- package/dist/legacy-root-azm/src/lowering/emitPhase1Types.js +0 -1
- package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.d.ts +0 -70
- package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.js +0 -203
- package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.d.ts +0 -82
- package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.js +0 -55
- package/dist/legacy-root-azm/src/lowering/emitPipeline.d.ts +0 -121
- package/dist/legacy-root-azm/src/lowering/emitPipeline.js +0 -57
- package/dist/legacy-root-azm/src/lowering/emitProgramContext.d.ts +0 -39
- package/dist/legacy-root-azm/src/lowering/emitProgramContext.js +0 -29
- package/dist/legacy-root-azm/src/lowering/emitState.d.ts +0 -90
- package/dist/legacy-root-azm/src/lowering/emitState.js +0 -124
- package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.js +0 -23
- package/dist/legacy-root-azm/src/lowering/fixupEmission.d.ts +0 -64
- package/dist/legacy-root-azm/src/lowering/fixupEmission.js +0 -199
- package/dist/legacy-root-azm/src/lowering/immMath.d.ts +0 -2
- package/dist/legacy-root-azm/src/lowering/immMath.js +0 -34
- package/dist/legacy-root-azm/src/lowering/inputAssets.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/inputAssets.js +0 -106
- package/dist/legacy-root-azm/src/lowering/ldEncoding.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/ldEncoding.js +0 -12
- package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.d.ts +0 -5
- package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.js +0 -124
- package/dist/legacy-root-azm/src/lowering/ldFormSelection.d.ts +0 -26
- package/dist/legacy-root-azm/src/lowering/ldFormSelection.js +0 -92
- package/dist/legacy-root-azm/src/lowering/ldLowering.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/ldLowering.js +0 -13
- package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.d.ts +0 -23
- package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.js +0 -185
- package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.js +0 -86
- package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.d.ts +0 -27
- package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.js +0 -215
- package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.d.ts +0 -202
- package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.js +0 -1
- package/dist/legacy-root-azm/src/lowering/loweredFormat.d.ts +0 -3
- package/dist/legacy-root-azm/src/lowering/loweredFormat.js +0 -26
- package/dist/legacy-root-azm/src/lowering/loweredItemSize.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/loweredItemSize.js +0 -17
- package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.d.ts +0 -9
- package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.js +0 -55
- package/dist/legacy-root-azm/src/lowering/loweringTypes.d.ts +0 -27
- package/dist/legacy-root-azm/src/lowering/loweringTypes.js +0 -1
- package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.d.ts +0 -9
- package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.js +0 -9
- package/dist/legacy-root-azm/src/lowering/opExpansionExecution.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/opExpansionExecution.js +0 -45
- package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.js +0 -88
- package/dist/legacy-root-azm/src/lowering/opExpansionStream.d.ts +0 -12
- package/dist/legacy-root-azm/src/lowering/opExpansionStream.js +0 -176
- package/dist/legacy-root-azm/src/lowering/opMatching.d.ts +0 -52
- package/dist/legacy-root-azm/src/lowering/opMatching.js +0 -355
- package/dist/legacy-root-azm/src/lowering/opSubstitution.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/opSubstitution.js +0 -175
- package/dist/legacy-root-azm/src/lowering/prescanTypes.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/prescanTypes.js +0 -1
- package/dist/legacy-root-azm/src/lowering/programLowering.d.ts +0 -144
- package/dist/legacy-root-azm/src/lowering/programLowering.js +0 -2
- package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.d.ts +0 -5
- package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.js +0 -5
- package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.d.ts +0 -18
- package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.js +0 -115
- package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.d.ts +0 -2
- package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.js +0 -93
- package/dist/legacy-root-azm/src/lowering/programPrescan.d.ts +0 -3
- package/dist/legacy-root-azm/src/lowering/programPrescan.js +0 -37
- package/dist/legacy-root-azm/src/lowering/traceFormat.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/traceFormat.js +0 -211
- package/dist/legacy-root-azm/src/packageInfo.d.ts +0 -1
- package/dist/legacy-root-azm/src/packageInfo.js +0 -15
- package/dist/legacy-root-azm/src/pathCompare.d.ts +0 -3
- package/dist/legacy-root-azm/src/pathCompare.js +0 -26
- package/dist/legacy-root-azm/src/pipeline.d.ts +0 -91
- package/dist/legacy-root-azm/src/pipeline.js +0 -1
- package/dist/legacy-root-azm/src/registerCare/analyze.d.ts +0 -24
- package/dist/legacy-root-azm/src/registerCare/analyze.js +0 -327
- package/dist/legacy-root-azm/src/registerCare/boundaryHints.d.ts +0 -2
- package/dist/legacy-root-azm/src/registerCare/boundaryHints.js +0 -10
- package/dist/legacy-root-azm/src/registerCare/carriers.d.ts +0 -4
- package/dist/legacy-root-azm/src/registerCare/carriers.js +0 -78
- package/dist/legacy-root-azm/src/registerCare/controlFlow.d.ts +0 -5
- package/dist/legacy-root-azm/src/registerCare/controlFlow.js +0 -35
- package/dist/legacy-root-azm/src/registerCare/fix.d.ts +0 -11
- package/dist/legacy-root-azm/src/registerCare/fix.js +0 -119
- package/dist/legacy-root-azm/src/registerCare/liveness.d.ts +0 -7
- package/dist/legacy-root-azm/src/registerCare/liveness.js +0 -227
- package/dist/legacy-root-azm/src/registerCare/profiles.d.ts +0 -11
- package/dist/legacy-root-azm/src/registerCare/profiles.js +0 -45
- package/dist/legacy-root-azm/src/registerCare/programModel.d.ts +0 -3
- package/dist/legacy-root-azm/src/registerCare/programModel.js +0 -181
- package/dist/legacy-root-azm/src/registerCare/report.d.ts +0 -5
- package/dist/legacy-root-azm/src/registerCare/report.js +0 -139
- package/dist/legacy-root-azm/src/registerCare/smartComments.d.ts +0 -5
- package/dist/legacy-root-azm/src/registerCare/smartComments.js +0 -247
- package/dist/legacy-root-azm/src/registerCare/types.d.ts +0 -154
- package/dist/legacy-root-azm/src/registerCare/types.js +0 -1
- package/dist/legacy-root-azm/src/semantics/declVisitor.d.ts +0 -5
- package/dist/legacy-root-azm/src/semantics/declVisitor.js +0 -11
- package/dist/legacy-root-azm/src/semantics/env.d.ts +0 -28
- package/dist/legacy-root-azm/src/semantics/env.js +0 -432
- package/dist/legacy-root-azm/src/semantics/layout.d.ts +0 -21
- package/dist/legacy-root-azm/src/semantics/layout.js +0 -226
- package/dist/legacy-root-azm/src/semantics/layoutCastFold.d.ts +0 -22
- package/dist/legacy-root-azm/src/semantics/layoutCastFold.js +0 -118
- package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.d.ts +0 -2
- package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.js +0 -4
- package/dist/legacy-root-azm/src/semantics/typeQueries.d.ts +0 -31
- package/dist/legacy-root-azm/src/semantics/typeQueries.js +0 -124
- package/dist/legacy-root-azm/src/sourceIncludeExpansion.d.ts +0 -17
- package/dist/legacy-root-azm/src/sourceIncludeExpansion.js +0 -124
- package/dist/legacy-root-azm/src/sourceIncludePaths.d.ts +0 -1
- package/dist/legacy-root-azm/src/sourceIncludePaths.js +0 -12
- package/dist/legacy-root-azm/src/sourceLoader.d.ts +0 -15
- package/dist/legacy-root-azm/src/sourceLoader.js +0 -118
- package/dist/legacy-root-azm/src/z80/effects.d.ts +0 -3
- package/dist/legacy-root-azm/src/z80/effects.js +0 -516
- package/dist/legacy-root-azm/src/z80/encode.d.ts +0 -10
- package/dist/legacy-root-azm/src/z80/encode.js +0 -412
- package/dist/legacy-root-azm/src/z80/encodeAlu.d.ts +0 -7
- package/dist/legacy-root-azm/src/z80/encodeAlu.js +0 -219
- package/dist/legacy-root-azm/src/z80/encodeBitOps.d.ts +0 -7
- package/dist/legacy-root-azm/src/z80/encodeBitOps.js +0 -123
- package/dist/legacy-root-azm/src/z80/encodeContext.d.ts +0 -29
- package/dist/legacy-root-azm/src/z80/encodeContext.js +0 -1
- package/dist/legacy-root-azm/src/z80/encodeControl.d.ts +0 -26
- package/dist/legacy-root-azm/src/z80/encodeControl.js +0 -180
- package/dist/legacy-root-azm/src/z80/encodeCoreOps.d.ts +0 -7
- package/dist/legacy-root-azm/src/z80/encodeCoreOps.js +0 -131
- package/dist/legacy-root-azm/src/z80/encodeIo.d.ts +0 -9
- package/dist/legacy-root-azm/src/z80/encodeIo.js +0 -128
- package/dist/legacy-root-azm/src/z80/encodeLd.d.ts +0 -13
- package/dist/legacy-root-azm/src/z80/encodeLd.js +0 -273
- package/dist/legacy-root-azm/src/z80/encoderRegistry.d.ts +0 -13
- package/dist/legacy-root-azm/src/z80/encoderRegistry.js +0 -169
- package/dist/src/outputs/write-listing.d.ts +0 -2
- package/dist/src/outputs/write-listing.js +0 -79
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.d.ts +0 -0
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.js +0 -0
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.d.ts +0 -0
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.js +0 -0
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.d.ts +0 -0
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { formatAbs16FixupAsm, formatAbs16FixupEdAsm, formatAbs16FixupPrefixedAsm, } from './traceFormat.js';
|
|
2
|
-
export function createFixupEmissionHelpers(ctx) {
|
|
3
|
-
const recordLoweredInstr = (bytes, asmText, span) => {
|
|
4
|
-
ctx.recordLoweredInstr?.(bytes, asmText, span);
|
|
5
|
-
};
|
|
6
|
-
const emitAbs16Bytes = (bytes, patchOffsetFromStart, baseLower, addend, span, asmText) => {
|
|
7
|
-
const start = ctx.getCodeOffset();
|
|
8
|
-
for (let index = 0; index < bytes.length; index++) {
|
|
9
|
-
ctx.setCodeByte(start + index, bytes[index]);
|
|
10
|
-
}
|
|
11
|
-
ctx.setCodeOffset(start + bytes.length);
|
|
12
|
-
ctx.recordCodeSourceRange(start, start + bytes.length);
|
|
13
|
-
ctx.pushFixup({ offset: start + patchOffsetFromStart, baseLower, addend, file: span.file });
|
|
14
|
-
ctx.traceInstruction(start, bytes, asmText);
|
|
15
|
-
recordLoweredInstr(bytes, asmText, span);
|
|
16
|
-
};
|
|
17
|
-
const emitAbs16Fixup = (opcode, baseLower, addend, span, asmText) => {
|
|
18
|
-
const bytes = Uint8Array.of(opcode, 0x00, 0x00);
|
|
19
|
-
const text = asmText ?? formatAbs16FixupAsm(opcode, baseLower, addend);
|
|
20
|
-
emitAbs16Bytes(bytes, 1, baseLower, addend, span, text);
|
|
21
|
-
};
|
|
22
|
-
const emitAbs16FixupEd = (opcode2, baseLower, addend, span, asmText) => {
|
|
23
|
-
const bytes = Uint8Array.of(0xed, opcode2, 0x00, 0x00);
|
|
24
|
-
const text = asmText ?? formatAbs16FixupEdAsm(opcode2, baseLower, addend);
|
|
25
|
-
emitAbs16Bytes(bytes, 2, baseLower, addend, span, text);
|
|
26
|
-
};
|
|
27
|
-
const emitAbs16FixupPrefixed = (prefix, opcode2, baseLower, addend, span, asmText) => {
|
|
28
|
-
const bytes = Uint8Array.of(prefix, opcode2, 0x00, 0x00);
|
|
29
|
-
const text = asmText ?? formatAbs16FixupPrefixedAsm(prefix, opcode2, baseLower, addend);
|
|
30
|
-
emitAbs16Bytes(bytes, 2, baseLower, addend, span, text);
|
|
31
|
-
};
|
|
32
|
-
const emitRel8Fixup = (opcode, baseLower, addend, span, mnemonic, asmText) => {
|
|
33
|
-
const start = ctx.getCodeOffset();
|
|
34
|
-
ctx.setCodeByte(start, opcode);
|
|
35
|
-
ctx.setCodeByte(start + 1, 0x00);
|
|
36
|
-
ctx.setCodeOffset(start + 2);
|
|
37
|
-
ctx.recordCodeSourceRange(start, start + 2);
|
|
38
|
-
ctx.pushRel8Fixup({
|
|
39
|
-
offset: start + 1,
|
|
40
|
-
origin: start + 2,
|
|
41
|
-
baseLower,
|
|
42
|
-
addend,
|
|
43
|
-
file: span.file,
|
|
44
|
-
mnemonic,
|
|
45
|
-
});
|
|
46
|
-
const bytes = Uint8Array.of(opcode, 0x00);
|
|
47
|
-
const text = asmText ?? `${mnemonic} ${baseLower}`;
|
|
48
|
-
ctx.traceInstruction(start, bytes, text);
|
|
49
|
-
recordLoweredInstr(bytes, text, span);
|
|
50
|
-
};
|
|
51
|
-
const conditionOpcodeFromName = (nameRaw) => {
|
|
52
|
-
const asName = nameRaw.toUpperCase();
|
|
53
|
-
switch (asName) {
|
|
54
|
-
case 'NZ':
|
|
55
|
-
return 0xc2;
|
|
56
|
-
case 'Z':
|
|
57
|
-
return 0xca;
|
|
58
|
-
case 'NC':
|
|
59
|
-
return 0xd2;
|
|
60
|
-
case 'C':
|
|
61
|
-
return 0xda;
|
|
62
|
-
case 'PO':
|
|
63
|
-
return 0xe2;
|
|
64
|
-
case 'PE':
|
|
65
|
-
return 0xea;
|
|
66
|
-
case 'P':
|
|
67
|
-
return 0xf2;
|
|
68
|
-
case 'M':
|
|
69
|
-
return 0xfa;
|
|
70
|
-
default:
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
const conditionNameFromOpcode = (opcode) => {
|
|
75
|
-
switch (opcode) {
|
|
76
|
-
case 0xc2:
|
|
77
|
-
return 'NZ';
|
|
78
|
-
case 0xca:
|
|
79
|
-
return 'Z';
|
|
80
|
-
case 0xd2:
|
|
81
|
-
return 'NC';
|
|
82
|
-
case 0xda:
|
|
83
|
-
return 'C';
|
|
84
|
-
case 0xe2:
|
|
85
|
-
return 'PO';
|
|
86
|
-
case 0xea:
|
|
87
|
-
return 'PE';
|
|
88
|
-
case 0xf2:
|
|
89
|
-
return 'P';
|
|
90
|
-
case 0xfa:
|
|
91
|
-
return 'M';
|
|
92
|
-
default:
|
|
93
|
-
return undefined;
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
const callConditionOpcodeFromName = (nameRaw) => {
|
|
97
|
-
switch (nameRaw.toUpperCase()) {
|
|
98
|
-
case 'NZ':
|
|
99
|
-
return 0xc4;
|
|
100
|
-
case 'Z':
|
|
101
|
-
return 0xcc;
|
|
102
|
-
case 'NC':
|
|
103
|
-
return 0xd4;
|
|
104
|
-
case 'C':
|
|
105
|
-
return 0xdc;
|
|
106
|
-
case 'PO':
|
|
107
|
-
return 0xe4;
|
|
108
|
-
case 'PE':
|
|
109
|
-
return 0xec;
|
|
110
|
-
case 'P':
|
|
111
|
-
return 0xf4;
|
|
112
|
-
case 'M':
|
|
113
|
-
return 0xfc;
|
|
114
|
-
default:
|
|
115
|
-
return undefined;
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
const symbolicTargetFromExpr = (expr) => {
|
|
119
|
-
if (expr.kind === 'ImmName')
|
|
120
|
-
return { baseLower: expr.name.toLowerCase(), addend: 0 };
|
|
121
|
-
if (expr.kind !== 'ImmBinary')
|
|
122
|
-
return undefined;
|
|
123
|
-
if (expr.op !== '+' && expr.op !== '-')
|
|
124
|
-
return undefined;
|
|
125
|
-
const leftName = expr.left.kind === 'ImmName' ? expr.left.name.toLowerCase() : undefined;
|
|
126
|
-
const rightName = expr.right.kind === 'ImmName' ? expr.right.name.toLowerCase() : undefined;
|
|
127
|
-
if (leftName) {
|
|
128
|
-
const right = ctx.evalImmExpr(expr.right);
|
|
129
|
-
if (right === undefined)
|
|
130
|
-
return undefined;
|
|
131
|
-
return { baseLower: leftName, addend: expr.op === '+' ? right : -right };
|
|
132
|
-
}
|
|
133
|
-
if (expr.op === '+' && rightName) {
|
|
134
|
-
const left = ctx.evalImmExpr(expr.left);
|
|
135
|
-
if (left === undefined)
|
|
136
|
-
return undefined;
|
|
137
|
-
return { baseLower: rightName, addend: left };
|
|
138
|
-
}
|
|
139
|
-
return undefined;
|
|
140
|
-
};
|
|
141
|
-
const jrConditionOpcodeFromName = (nameRaw) => {
|
|
142
|
-
switch (nameRaw.toUpperCase()) {
|
|
143
|
-
case 'NZ':
|
|
144
|
-
return 0x20;
|
|
145
|
-
case 'Z':
|
|
146
|
-
return 0x28;
|
|
147
|
-
case 'NC':
|
|
148
|
-
return 0x30;
|
|
149
|
-
case 'C':
|
|
150
|
-
return 0x38;
|
|
151
|
-
default:
|
|
152
|
-
return undefined;
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
const conditionOpcode = (op) => {
|
|
156
|
-
const asName = op.kind === 'Imm' && op.expr.kind === 'ImmName'
|
|
157
|
-
? op.expr.name
|
|
158
|
-
: op.kind === 'Reg'
|
|
159
|
-
? op.name
|
|
160
|
-
: undefined;
|
|
161
|
-
return asName ? conditionOpcodeFromName(asName) : undefined;
|
|
162
|
-
};
|
|
163
|
-
const inverseConditionName = (nameRaw) => {
|
|
164
|
-
const name = nameRaw.toUpperCase();
|
|
165
|
-
switch (name) {
|
|
166
|
-
case 'NZ':
|
|
167
|
-
return 'Z';
|
|
168
|
-
case 'Z':
|
|
169
|
-
return 'NZ';
|
|
170
|
-
case 'NC':
|
|
171
|
-
return 'C';
|
|
172
|
-
case 'C':
|
|
173
|
-
return 'NC';
|
|
174
|
-
case 'PO':
|
|
175
|
-
return 'PE';
|
|
176
|
-
case 'PE':
|
|
177
|
-
return 'PO';
|
|
178
|
-
case 'P':
|
|
179
|
-
return 'M';
|
|
180
|
-
case 'M':
|
|
181
|
-
return 'P';
|
|
182
|
-
default:
|
|
183
|
-
return undefined;
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
return {
|
|
187
|
-
callConditionOpcodeFromName,
|
|
188
|
-
conditionNameFromOpcode,
|
|
189
|
-
conditionOpcode,
|
|
190
|
-
conditionOpcodeFromName,
|
|
191
|
-
emitAbs16Fixup,
|
|
192
|
-
emitAbs16FixupEd,
|
|
193
|
-
emitAbs16FixupPrefixed,
|
|
194
|
-
emitRel8Fixup,
|
|
195
|
-
inverseConditionName,
|
|
196
|
-
jrConditionOpcodeFromName,
|
|
197
|
-
symbolicTargetFromExpr,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export function evalUnaryImmOp(op, value) {
|
|
2
|
-
switch (op) {
|
|
3
|
-
case '+':
|
|
4
|
-
return +value;
|
|
5
|
-
case '-':
|
|
6
|
-
return -value;
|
|
7
|
-
case '~':
|
|
8
|
-
return ~value;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
export function evalBinaryImmOp(op, left, right) {
|
|
12
|
-
switch (op) {
|
|
13
|
-
case '*':
|
|
14
|
-
return left * right;
|
|
15
|
-
case '/':
|
|
16
|
-
return right === 0 ? undefined : Math.trunc(left / right);
|
|
17
|
-
case '%':
|
|
18
|
-
return right === 0 ? undefined : left % right;
|
|
19
|
-
case '+':
|
|
20
|
-
return left + right;
|
|
21
|
-
case '-':
|
|
22
|
-
return left - right;
|
|
23
|
-
case '&':
|
|
24
|
-
return left & right;
|
|
25
|
-
case '^':
|
|
26
|
-
return left ^ right;
|
|
27
|
-
case '|':
|
|
28
|
-
return left | right;
|
|
29
|
-
case '<<':
|
|
30
|
-
return left << right;
|
|
31
|
-
case '>>':
|
|
32
|
-
return left >> right;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
type InputDiag = (file: string, message: string) => void;
|
|
2
|
-
export declare function loadBinInput(fromFile: string, fromPath: string, includeDirs: readonly string[], report: InputDiag): Buffer | undefined;
|
|
3
|
-
export declare function parseIntelHex(ownerFile: string, hexText: string, report: InputDiag): {
|
|
4
|
-
bytes: Map<number, number>;
|
|
5
|
-
minAddress: number;
|
|
6
|
-
} | undefined;
|
|
7
|
-
export {};
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { dirname, resolve } from 'node:path';
|
|
3
|
-
function resolveInputPath(fromFile, fromPath, includeDirs, report) {
|
|
4
|
-
const candidates = [];
|
|
5
|
-
candidates.push(resolve(dirname(fromFile), fromPath));
|
|
6
|
-
for (const inc of includeDirs)
|
|
7
|
-
candidates.push(resolve(inc, fromPath));
|
|
8
|
-
const seen = new Set();
|
|
9
|
-
for (const candidate of candidates) {
|
|
10
|
-
if (seen.has(candidate))
|
|
11
|
-
continue;
|
|
12
|
-
seen.add(candidate);
|
|
13
|
-
if (existsSync(candidate))
|
|
14
|
-
return candidate;
|
|
15
|
-
}
|
|
16
|
-
report(fromFile, `Failed to resolve input path "${fromPath}".`);
|
|
17
|
-
return undefined;
|
|
18
|
-
}
|
|
19
|
-
export function loadBinInput(fromFile, fromPath, includeDirs, report) {
|
|
20
|
-
const path = resolveInputPath(fromFile, fromPath, includeDirs, report);
|
|
21
|
-
if (!path)
|
|
22
|
-
return undefined;
|
|
23
|
-
try {
|
|
24
|
-
return readFileSync(path);
|
|
25
|
-
}
|
|
26
|
-
catch (err) {
|
|
27
|
-
report(fromFile, `Failed to read bin file "${path}": ${String(err)}`);
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
export function parseIntelHex(ownerFile, hexText, report) {
|
|
32
|
-
const out = new Map();
|
|
33
|
-
let minAddress = Number.POSITIVE_INFINITY;
|
|
34
|
-
const lines = hexText.split(/\r?\n/);
|
|
35
|
-
let sawData = false;
|
|
36
|
-
let sawEof = false;
|
|
37
|
-
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
|
|
38
|
-
const raw = lines[lineIndex].trim();
|
|
39
|
-
if (raw.length === 0)
|
|
40
|
-
continue;
|
|
41
|
-
if (!raw.startsWith(':')) {
|
|
42
|
-
report(ownerFile, `Invalid Intel HEX record at line ${lineIndex + 1}.`);
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
const body = raw.slice(1);
|
|
46
|
-
if (body.length < 10 || body.length % 2 !== 0) {
|
|
47
|
-
report(ownerFile, `Malformed Intel HEX record at line ${lineIndex + 1}.`);
|
|
48
|
-
return undefined;
|
|
49
|
-
}
|
|
50
|
-
const bytesLine = [];
|
|
51
|
-
for (let i = 0; i < body.length; i += 2) {
|
|
52
|
-
const pair = body.slice(i, i + 2);
|
|
53
|
-
const value = Number.parseInt(pair, 16);
|
|
54
|
-
if (Number.isNaN(value)) {
|
|
55
|
-
report(ownerFile, `Invalid HEX byte "${pair}" at line ${lineIndex + 1}.`);
|
|
56
|
-
return undefined;
|
|
57
|
-
}
|
|
58
|
-
bytesLine.push(value & 0xff);
|
|
59
|
-
}
|
|
60
|
-
const len = bytesLine[0];
|
|
61
|
-
const addr = ((bytesLine[1] << 8) | bytesLine[2]) & 0xffff;
|
|
62
|
-
const type = bytesLine[3];
|
|
63
|
-
const data = bytesLine.slice(4, bytesLine.length - 1);
|
|
64
|
-
if (len !== data.length) {
|
|
65
|
-
report(ownerFile, `Intel HEX length mismatch at line ${lineIndex + 1}.`);
|
|
66
|
-
return undefined;
|
|
67
|
-
}
|
|
68
|
-
const sum = bytesLine.reduce((acc, byte) => (acc + byte) & 0xff, 0);
|
|
69
|
-
if (sum !== 0) {
|
|
70
|
-
report(ownerFile, `Intel HEX checksum mismatch at line ${lineIndex + 1}.`);
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
if (sawEof) {
|
|
74
|
-
report(ownerFile, `Intel HEX data found after EOF record.`);
|
|
75
|
-
return undefined;
|
|
76
|
-
}
|
|
77
|
-
if (type === 0x00) {
|
|
78
|
-
for (let i = 0; i < data.length; i++) {
|
|
79
|
-
const address = addr + i;
|
|
80
|
-
if (address < 0 || address > 0xffff) {
|
|
81
|
-
report(ownerFile, `Intel HEX address out of range at line ${lineIndex + 1}.`);
|
|
82
|
-
return undefined;
|
|
83
|
-
}
|
|
84
|
-
if (out.has(address)) {
|
|
85
|
-
report(ownerFile, `Intel HEX overlaps itself at address ${address}.`);
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
|
-
out.set(address, data[i]);
|
|
89
|
-
minAddress = Math.min(minAddress, address);
|
|
90
|
-
}
|
|
91
|
-
sawData = true;
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
if (type === 0x01) {
|
|
95
|
-
sawEof = true;
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
report(ownerFile, `Unsupported Intel HEX record type ${type.toString(16).padStart(2, '0')} at line ${lineIndex + 1}.`);
|
|
99
|
-
return undefined;
|
|
100
|
-
}
|
|
101
|
-
if (!sawData) {
|
|
102
|
-
report(ownerFile, `Intel HEX file has no data records.`);
|
|
103
|
-
return undefined;
|
|
104
|
-
}
|
|
105
|
-
return { bytes: out, minAddress };
|
|
106
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Diagnostic } from '../diagnosticTypes.js';
|
|
2
|
-
import type { SourceSpan } from '../frontend/ast.js';
|
|
3
|
-
import type { LdForm } from './ldFormSelection.js';
|
|
4
|
-
export type LdEncodingContext = {
|
|
5
|
-
diagAt: (diagnostics: Diagnostic[], span: SourceSpan, message: string) => void;
|
|
6
|
-
diagnostics: Diagnostic[];
|
|
7
|
-
emitAbs16Fixup: (opcode: number, target: string, addend: number, span: SourceSpan, asmText?: string) => void;
|
|
8
|
-
emitAbs16FixupEd: (opcode: number, target: string, addend: number, span: SourceSpan, asmText?: string) => void;
|
|
9
|
-
emitAbs16FixupPrefixed: (prefix: number, opcode: number, target: string, addend: number, span: SourceSpan, asmText?: string) => void;
|
|
10
|
-
reg8Code: ReadonlyMap<string, number>;
|
|
11
|
-
setSpTrackingInvalid: () => void;
|
|
12
|
-
};
|
|
13
|
-
export declare function createLdEncodingHelpers(ctx: LdEncodingContext): {
|
|
14
|
-
emitLdForm: (form: LdForm) => boolean;
|
|
15
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { createLdEncodingRegMemHelpers } from './ldEncodingRegMemHelpers.js';
|
|
2
|
-
export function createLdEncodingHelpers(ctx) {
|
|
3
|
-
const { emitLdRegMemForm } = createLdEncodingRegMemHelpers(ctx);
|
|
4
|
-
const emitLdForm = (form) => {
|
|
5
|
-
const regMemHandled = emitLdRegMemForm(form);
|
|
6
|
-
if (regMemHandled !== null) {
|
|
7
|
-
return regMemHandled;
|
|
8
|
-
}
|
|
9
|
-
return false;
|
|
10
|
-
};
|
|
11
|
-
return { emitLdForm };
|
|
12
|
-
}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
export function createLdEncodingRegMemHelpers(ctx) {
|
|
2
|
-
const { emitAbs16Fixup, emitAbs16FixupEd, emitAbs16FixupPrefixed, reg8Code, setSpTrackingInvalid, } = ctx;
|
|
3
|
-
const emitRegFromMem = (form) => {
|
|
4
|
-
const { dst, src, inst, srcResolved } = form;
|
|
5
|
-
if (dst.kind !== 'Reg' || src.kind !== 'Mem')
|
|
6
|
-
return false;
|
|
7
|
-
if (form.srcHasRegisterLikeEaBase)
|
|
8
|
-
return false;
|
|
9
|
-
if (form.srcIsIxIyDispMem && reg8Code.has(dst.name.toUpperCase()))
|
|
10
|
-
return false;
|
|
11
|
-
if (form.srcIsEaNameHL)
|
|
12
|
-
return false;
|
|
13
|
-
if (dst.name.toUpperCase() === 'A' && form.srcIsEaNameBCorDE)
|
|
14
|
-
return false;
|
|
15
|
-
if (dst.name.toUpperCase() === 'A' && srcResolved?.kind === 'abs') {
|
|
16
|
-
emitAbs16Fixup(0x3a, srcResolved.baseLower, srcResolved.addend, inst.span);
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
const regUp = dst.name.toUpperCase();
|
|
20
|
-
if (reg8Code.has(regUp)) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
const r16 = dst.name.toUpperCase();
|
|
24
|
-
if (r16 === 'HL') {
|
|
25
|
-
if (srcResolved?.kind === 'abs') {
|
|
26
|
-
emitAbs16Fixup(0x2a, srcResolved.baseLower, srcResolved.addend, inst.span);
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
if (r16 === 'DE') {
|
|
32
|
-
if (srcResolved?.kind === 'abs') {
|
|
33
|
-
emitAbs16FixupEd(0x5b, srcResolved.baseLower, srcResolved.addend, inst.span);
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
if (r16 === 'BC') {
|
|
39
|
-
if (srcResolved?.kind === 'abs') {
|
|
40
|
-
emitAbs16FixupEd(0x4b, srcResolved.baseLower, srcResolved.addend, inst.span);
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
if (r16 === 'SP' && srcResolved?.kind === 'abs') {
|
|
46
|
-
emitAbs16FixupEd(0x7b, srcResolved.baseLower, srcResolved.addend, inst.span);
|
|
47
|
-
setSpTrackingInvalid();
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
if (r16 === 'IX' || r16 === 'IY') {
|
|
51
|
-
if (srcResolved?.kind === 'abs') {
|
|
52
|
-
emitAbs16FixupPrefixed(r16 === 'IX' ? 0xdd : 0xfd, 0x2a, srcResolved.baseLower, srcResolved.addend, inst.span);
|
|
53
|
-
return true;
|
|
54
|
-
}
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
return false;
|
|
58
|
-
};
|
|
59
|
-
const emitMemFromReg = (form) => {
|
|
60
|
-
const { dst, src, inst, dstResolved } = form;
|
|
61
|
-
if (dst.kind !== 'Mem' || src.kind !== 'Reg')
|
|
62
|
-
return false;
|
|
63
|
-
if (form.dstHasRegisterLikeEaBase)
|
|
64
|
-
return false;
|
|
65
|
-
if (form.dstIsIxIyDispMem && reg8Code.has(src.name.toUpperCase()))
|
|
66
|
-
return false;
|
|
67
|
-
if (form.dstIsEaNameHL)
|
|
68
|
-
return false;
|
|
69
|
-
if (src.name.toUpperCase() === 'A' && form.dstIsEaNameBCorDE)
|
|
70
|
-
return false;
|
|
71
|
-
if (src.name.toUpperCase() === 'A' && dstResolved?.kind === 'abs') {
|
|
72
|
-
emitAbs16Fixup(0x32, dstResolved.baseLower, dstResolved.addend, inst.span);
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
const regUp = src.name.toUpperCase();
|
|
76
|
-
if (reg8Code.has(regUp)) {
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
const r16 = src.name.toUpperCase();
|
|
80
|
-
if (r16 === 'HL') {
|
|
81
|
-
if (dstResolved?.kind === 'abs') {
|
|
82
|
-
emitAbs16Fixup(0x22, dstResolved.baseLower, dstResolved.addend, inst.span);
|
|
83
|
-
return true;
|
|
84
|
-
}
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
if (r16 === 'DE') {
|
|
88
|
-
if (dstResolved?.kind === 'abs') {
|
|
89
|
-
emitAbs16FixupEd(0x53, dstResolved.baseLower, dstResolved.addend, inst.span);
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
if (r16 === 'BC') {
|
|
95
|
-
if (dstResolved?.kind === 'abs') {
|
|
96
|
-
emitAbs16FixupEd(0x43, dstResolved.baseLower, dstResolved.addend, inst.span);
|
|
97
|
-
return true;
|
|
98
|
-
}
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
if (r16 === 'SP' && dstResolved?.kind === 'abs') {
|
|
102
|
-
emitAbs16FixupEd(0x73, dstResolved.baseLower, dstResolved.addend, inst.span);
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
if (r16 === 'IX' || r16 === 'IY') {
|
|
106
|
-
if (dstResolved?.kind === 'abs') {
|
|
107
|
-
emitAbs16FixupPrefixed(r16 === 'IX' ? 0xdd : 0xfd, 0x22, dstResolved.baseLower, dstResolved.addend, inst.span);
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
return false;
|
|
113
|
-
};
|
|
114
|
-
const emitLdRegMemForm = (form) => {
|
|
115
|
-
if (form.dst.kind === 'Reg' && form.src.kind === 'Mem') {
|
|
116
|
-
return emitRegFromMem(form);
|
|
117
|
-
}
|
|
118
|
-
if (form.dst.kind === 'Mem' && form.src.kind === 'Reg') {
|
|
119
|
-
return emitMemFromReg(form);
|
|
120
|
-
}
|
|
121
|
-
return null;
|
|
122
|
-
};
|
|
123
|
-
return { emitLdRegMemForm };
|
|
124
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { AsmInstructionNode, AsmOperandNode, EaExprNode } from '../frontend/ast.js';
|
|
2
|
-
import type { SourceSpan } from '../frontend/ast.js';
|
|
3
|
-
import type { CompileEnv } from '../semantics/env.js';
|
|
4
|
-
import type { EaResolution } from './eaResolution.js';
|
|
5
|
-
export type LdForm = {
|
|
6
|
-
inst: AsmInstructionNode;
|
|
7
|
-
dst: AsmOperandNode;
|
|
8
|
-
src: AsmOperandNode;
|
|
9
|
-
dstResolved: EaResolution | undefined;
|
|
10
|
-
srcResolved: EaResolution | undefined;
|
|
11
|
-
srcHasRegisterLikeEaBase: boolean;
|
|
12
|
-
dstHasRegisterLikeEaBase: boolean;
|
|
13
|
-
srcIsIxIyDispMem: boolean;
|
|
14
|
-
dstIsIxIyDispMem: boolean;
|
|
15
|
-
srcIsEaNameHL: boolean;
|
|
16
|
-
dstIsEaNameHL: boolean;
|
|
17
|
-
srcIsEaNameBCorDE: boolean;
|
|
18
|
-
dstIsEaNameBCorDE: boolean;
|
|
19
|
-
};
|
|
20
|
-
export type LdFormSelectionContext = {
|
|
21
|
-
env: CompileEnv;
|
|
22
|
-
resolveEa: (ea: EaExprNode, span: SourceSpan) => EaResolution | undefined;
|
|
23
|
-
};
|
|
24
|
-
export declare function createLdFormSelectionHelpers(ctx: LdFormSelectionContext): {
|
|
25
|
-
analyzeLdInstruction: (inst: AsmInstructionNode) => LdForm | null;
|
|
26
|
-
};
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
export function createLdFormSelectionHelpers(ctx) {
|
|
2
|
-
const { env, resolveEa } = ctx;
|
|
3
|
-
const coerceValueOperand = (op) => {
|
|
4
|
-
if (op.kind === 'Reg') {
|
|
5
|
-
const lower = op.name.toLowerCase();
|
|
6
|
-
if (env.equates.has(lower)) {
|
|
7
|
-
return {
|
|
8
|
-
kind: 'Mem',
|
|
9
|
-
span: op.span,
|
|
10
|
-
expr: { kind: 'EaName', span: op.span, name: op.name },
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return op;
|
|
15
|
-
};
|
|
16
|
-
const isRegisterToken = (name) => {
|
|
17
|
-
const token = name.toUpperCase();
|
|
18
|
-
return (token === 'A' ||
|
|
19
|
-
token === 'B' ||
|
|
20
|
-
token === 'C' ||
|
|
21
|
-
token === 'D' ||
|
|
22
|
-
token === 'E' ||
|
|
23
|
-
token === 'H' ||
|
|
24
|
-
token === 'L' ||
|
|
25
|
-
token === 'AF' ||
|
|
26
|
-
token === 'BC' ||
|
|
27
|
-
token === 'DE' ||
|
|
28
|
-
token === 'HL' ||
|
|
29
|
-
token === 'SP' ||
|
|
30
|
-
token === 'IX' ||
|
|
31
|
-
token === 'IY' ||
|
|
32
|
-
token === 'IXH' ||
|
|
33
|
-
token === 'IXL' ||
|
|
34
|
-
token === 'IYH' ||
|
|
35
|
-
token === 'IYL');
|
|
36
|
-
};
|
|
37
|
-
const isBoundEaName = (name) => {
|
|
38
|
-
const lower = name.toLowerCase();
|
|
39
|
-
return env.equates.has(lower);
|
|
40
|
-
};
|
|
41
|
-
const hasRegisterLikeEaBase = (ea) => {
|
|
42
|
-
switch (ea.kind) {
|
|
43
|
-
case 'EaName':
|
|
44
|
-
return isRegisterToken(ea.name) && !isBoundEaName(ea.name);
|
|
45
|
-
case 'EaImm':
|
|
46
|
-
return false;
|
|
47
|
-
case 'EaLayoutCast':
|
|
48
|
-
return false;
|
|
49
|
-
case 'EaField':
|
|
50
|
-
return hasRegisterLikeEaBase(ea.base);
|
|
51
|
-
case 'EaIndex':
|
|
52
|
-
return hasRegisterLikeEaBase(ea.base);
|
|
53
|
-
case 'EaAdd':
|
|
54
|
-
case 'EaSub':
|
|
55
|
-
return hasRegisterLikeEaBase(ea.base);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
const isEaNameHL = (ea) => ea.kind === 'EaName' && ea.name.toUpperCase() === 'HL';
|
|
59
|
-
const isEaNameBCorDE = (ea) => ea.kind === 'EaName' && (ea.name.toUpperCase() === 'BC' || ea.name.toUpperCase() === 'DE');
|
|
60
|
-
const isIxIyBaseEa = (ea) => ea.kind === 'EaName' && (ea.name.toUpperCase() === 'IX' || ea.name.toUpperCase() === 'IY');
|
|
61
|
-
const isIxIyDispMem = (op) => op.kind === 'Mem' &&
|
|
62
|
-
(isIxIyBaseEa(op.expr) ||
|
|
63
|
-
(op.expr.kind === 'EaIndex' &&
|
|
64
|
-
isIxIyBaseEa(op.expr.base) &&
|
|
65
|
-
op.expr.index.kind === 'IndexImm') ||
|
|
66
|
-
((op.expr.kind === 'EaAdd' || op.expr.kind === 'EaSub') && isIxIyBaseEa(op.expr.base)));
|
|
67
|
-
const analyzeLdInstruction = (inst) => {
|
|
68
|
-
const head = inst.head.toLowerCase();
|
|
69
|
-
if (head !== 'ld' || inst.operands.length !== 2)
|
|
70
|
-
return null;
|
|
71
|
-
const dst = coerceValueOperand(inst.operands[0]);
|
|
72
|
-
const src = coerceValueOperand(inst.operands[1]);
|
|
73
|
-
const dstResolved = dst.kind === 'Mem' ? resolveEa(dst.expr, inst.span) : undefined;
|
|
74
|
-
const srcResolved = src.kind === 'Mem' ? resolveEa(src.expr, inst.span) : undefined;
|
|
75
|
-
return {
|
|
76
|
-
inst,
|
|
77
|
-
dst,
|
|
78
|
-
src,
|
|
79
|
-
dstResolved,
|
|
80
|
-
srcResolved,
|
|
81
|
-
srcHasRegisterLikeEaBase: src.kind === 'Mem' ? hasRegisterLikeEaBase(src.expr) : false,
|
|
82
|
-
dstHasRegisterLikeEaBase: dst.kind === 'Mem' ? hasRegisterLikeEaBase(dst.expr) : false,
|
|
83
|
-
srcIsIxIyDispMem: isIxIyDispMem(src),
|
|
84
|
-
dstIsIxIyDispMem: isIxIyDispMem(dst),
|
|
85
|
-
srcIsEaNameHL: src.kind === 'Mem' ? isEaNameHL(src.expr) : false,
|
|
86
|
-
dstIsEaNameHL: dst.kind === 'Mem' ? isEaNameHL(dst.expr) : false,
|
|
87
|
-
srcIsEaNameBCorDE: src.kind === 'Mem' ? isEaNameBCorDE(src.expr) : false,
|
|
88
|
-
dstIsEaNameBCorDE: dst.kind === 'Mem' ? isEaNameBCorDE(dst.expr) : false,
|
|
89
|
-
};
|
|
90
|
-
};
|
|
91
|
-
return { analyzeLdInstruction };
|
|
92
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { LdEncodingContext } from './ldEncoding.js';
|
|
2
|
-
import type { LdFormSelectionContext } from './ldFormSelection.js';
|
|
3
|
-
type LdLoweringContext = LdFormSelectionContext & LdEncodingContext;
|
|
4
|
-
export declare function createLdLoweringHelpers(ctx: LdLoweringContext): {
|
|
5
|
-
lowerLdWithEa: (inst: Parameters<(inst: import("../frontend/ast.js").AsmInstructionNode) => import("./ldFormSelection.js").LdForm | null>[0]) => boolean;
|
|
6
|
-
};
|
|
7
|
-
export {};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { createLdEncodingHelpers } from './ldEncoding.js';
|
|
2
|
-
import { createLdFormSelectionHelpers } from './ldFormSelection.js';
|
|
3
|
-
export function createLdLoweringHelpers(ctx) {
|
|
4
|
-
const { analyzeLdInstruction } = createLdFormSelectionHelpers(ctx);
|
|
5
|
-
const { emitLdForm } = createLdEncodingHelpers(ctx);
|
|
6
|
-
const lowerLdWithEa = (inst) => {
|
|
7
|
-
const form = analyzeLdInstruction(inst);
|
|
8
|
-
if (!form)
|
|
9
|
-
return false;
|
|
10
|
-
return emitLdForm(form);
|
|
11
|
-
};
|
|
12
|
-
return { lowerLdWithEa };
|
|
13
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { Diagnostic } from '../diagnosticTypes.js';
|
|
2
|
-
import type { CompileEnv } from '../semantics/env.js';
|
|
3
|
-
import type { LoweredAsmProgram } from './loweredAsmTypes.js';
|
|
4
|
-
type LoweredAsmByteEmissionContext = {
|
|
5
|
-
diagnostics: Diagnostic[];
|
|
6
|
-
diag: (diagnostics: Diagnostic[], file: string, message: string) => void;
|
|
7
|
-
primaryFile: string;
|
|
8
|
-
env: CompileEnv;
|
|
9
|
-
};
|
|
10
|
-
type LoweredAsmByteEmissionResult = {
|
|
11
|
-
codeBytes: Map<number, number>;
|
|
12
|
-
dataBytes: Map<number, number>;
|
|
13
|
-
blockSizesByKey: Map<string, number>;
|
|
14
|
-
maxAddress: number;
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* After link-time fixups are applied to `finalBytes`, patch lowered `instr` byte arrays
|
|
18
|
-
* (including `@raw` placeholders from abs16/rel8 fixups) so ASM80 listings match the
|
|
19
|
-
* merged image.
|
|
20
|
-
*/
|
|
21
|
-
export declare function syncLoweredAsmInstructionBytesFromFinalBytes(program: LoweredAsmProgram, finalBytes: Map<number, number>, env: CompileEnv): void;
|
|
22
|
-
export declare function emitLoweredAsmProgramBytes(program: LoweredAsmProgram, ctx: LoweredAsmByteEmissionContext): LoweredAsmByteEmissionResult;
|
|
23
|
-
export {};
|