@jhlagado/azm 0.2.1 → 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.
Files changed (313) hide show
  1. package/README.md +16 -9
  2. package/dist/src/api-compile.d.ts +0 -2
  3. package/dist/src/api-compile.js +1 -8
  4. package/dist/src/assembly/address-planning.js +19 -1
  5. package/dist/src/cli/parse-args.d.ts +0 -1
  6. package/dist/src/cli/parse-args.js +0 -7
  7. package/dist/src/cli/write-artifacts.js +0 -11
  8. package/dist/src/core/compile.js +192 -9
  9. package/dist/src/expansion/op-expansion.js +1 -0
  10. package/dist/src/model/expression.d.ts +4 -0
  11. package/dist/src/model/source-item.d.ts +5 -0
  12. package/dist/src/outputs/index.js +0 -2
  13. package/dist/src/outputs/types.d.ts +3 -16
  14. package/dist/src/outputs/write-asm80.js +84 -0
  15. package/dist/src/semantics/expression-evaluation.d.ts +7 -3
  16. package/dist/src/semantics/expression-evaluation.js +57 -0
  17. package/dist/src/syntax/directive-aliases.js +9 -10
  18. package/dist/src/syntax/parse-expression.js +34 -9
  19. package/dist/src/syntax/parse-line.js +87 -44
  20. package/dist/src/tooling/case-style.js +3 -0
  21. package/docs/reference/cli.md +6 -4
  22. package/docs/reference/tooling-api.md +1 -4
  23. package/package.json +2 -6
  24. package/dist/legacy-root-azm/src/analysis.d.ts +0 -11
  25. package/dist/legacy-root-azm/src/analysis.js +0 -41
  26. package/dist/legacy-root-azm/src/compile.d.ts +0 -10
  27. package/dist/legacy-root-azm/src/compile.js +0 -186
  28. package/dist/legacy-root-azm/src/compileShared.d.ts +0 -3
  29. package/dist/legacy-root-azm/src/compileShared.js +0 -7
  30. package/dist/legacy-root-azm/src/diagnosticTypes.d.ts +0 -77
  31. package/dist/legacy-root-azm/src/diagnosticTypes.js +0 -53
  32. package/dist/legacy-root-azm/src/formats/index.d.ts +0 -7
  33. package/dist/legacy-root-azm/src/formats/index.js +0 -17
  34. package/dist/legacy-root-azm/src/formats/range.d.ts +0 -17
  35. package/dist/legacy-root-azm/src/formats/range.js +0 -45
  36. package/dist/legacy-root-azm/src/formats/types.d.ts +0 -283
  37. package/dist/legacy-root-azm/src/formats/types.js +0 -1
  38. package/dist/legacy-root-azm/src/formats/writeAsm80.d.ts +0 -6
  39. package/dist/legacy-root-azm/src/formats/writeAsm80.js +0 -86
  40. package/dist/legacy-root-azm/src/formats/writeBin.d.ts +0 -7
  41. package/dist/legacy-root-azm/src/formats/writeBin.js +0 -23
  42. package/dist/legacy-root-azm/src/formats/writeD8m.d.ts +0 -9
  43. package/dist/legacy-root-azm/src/formats/writeD8m.js +0 -245
  44. package/dist/legacy-root-azm/src/formats/writeHex.d.ts +0 -8
  45. package/dist/legacy-root-azm/src/formats/writeHex.js +0 -38
  46. package/dist/legacy-root-azm/src/formats/writeListing.d.ts +0 -8
  47. package/dist/legacy-root-azm/src/formats/writeListing.js +0 -83
  48. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.d.ts +0 -39
  49. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.js +0 -89
  50. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.d.ts +0 -4
  51. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.js +0 -94
  52. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.d.ts +0 -10
  53. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.js +0 -25
  54. package/dist/legacy-root-azm/src/frontend/ast.d.ts +0 -376
  55. package/dist/legacy-root-azm/src/frontend/ast.js +0 -1
  56. package/dist/legacy-root-azm/src/frontend/directiveAliases.d.ts +0 -14
  57. package/dist/legacy-root-azm/src/frontend/directiveAliases.js +0 -189
  58. package/dist/legacy-root-azm/src/frontend/grammarData.d.ts +0 -14
  59. package/dist/legacy-root-azm/src/frontend/grammarData.js +0 -65
  60. package/dist/legacy-root-azm/src/frontend/immExprUtils.d.ts +0 -2
  61. package/dist/legacy-root-azm/src/frontend/immExprUtils.js +0 -12
  62. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.d.ts +0 -17
  63. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.js +0 -187
  64. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.d.ts +0 -3
  65. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.js +0 -73
  66. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.d.ts +0 -6
  67. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.js +0 -16
  68. package/dist/legacy-root-azm/src/frontend/parseAsmStream.d.ts +0 -10
  69. package/dist/legacy-root-azm/src/frontend/parseAsmStream.js +0 -33
  70. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.d.ts +0 -18
  71. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.js +0 -34
  72. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.d.ts +0 -9
  73. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.js +0 -16
  74. package/dist/legacy-root-azm/src/frontend/parseEnum.d.ts +0 -12
  75. package/dist/legacy-root-azm/src/frontend/parseEnum.js +0 -70
  76. package/dist/legacy-root-azm/src/frontend/parseImm.d.ts +0 -10
  77. package/dist/legacy-root-azm/src/frontend/parseImm.js +0 -397
  78. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.d.ts +0 -11
  79. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.js +0 -94
  80. package/dist/legacy-root-azm/src/frontend/parseOp.d.ts +0 -25
  81. package/dist/legacy-root-azm/src/frontend/parseOp.js +0 -120
  82. package/dist/legacy-root-azm/src/frontend/parseOpHeader.d.ts +0 -20
  83. package/dist/legacy-root-azm/src/frontend/parseOpHeader.js +0 -32
  84. package/dist/legacy-root-azm/src/frontend/parseOperands.d.ts +0 -4
  85. package/dist/legacy-root-azm/src/frontend/parseOperands.js +0 -290
  86. package/dist/legacy-root-azm/src/frontend/parseParams.d.ts +0 -6
  87. package/dist/legacy-root-azm/src/frontend/parseParams.js +0 -62
  88. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.d.ts +0 -12
  89. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.js +0 -17
  90. package/dist/legacy-root-azm/src/frontend/parseParserShared.d.ts +0 -2
  91. package/dist/legacy-root-azm/src/frontend/parseParserShared.js +0 -8
  92. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.d.ts +0 -1
  93. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.js +0 -3
  94. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.d.ts +0 -7
  95. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.js +0 -142
  96. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.d.ts +0 -34
  97. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.js +0 -177
  98. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.d.ts +0 -46
  99. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.js +0 -53
  100. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.d.ts +0 -16
  101. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.js +0 -68
  102. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.d.ts +0 -11
  103. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.js +0 -50
  104. package/dist/legacy-root-azm/src/frontend/parseTypes.d.ts +0 -24
  105. package/dist/legacy-root-azm/src/frontend/parseTypes.js +0 -77
  106. package/dist/legacy-root-azm/src/frontend/parser.d.ts +0 -11
  107. package/dist/legacy-root-azm/src/frontend/parser.js +0 -88
  108. package/dist/legacy-root-azm/src/frontend/source.d.ts +0 -28
  109. package/dist/legacy-root-azm/src/frontend/source.js +0 -58
  110. package/dist/legacy-root-azm/src/frontend/sourceExtensions.d.ts +0 -2
  111. package/dist/legacy-root-azm/src/frontend/sourceExtensions.js +0 -6
  112. package/dist/legacy-root-azm/src/lintCaseStyle.d.ts +0 -4
  113. package/dist/legacy-root-azm/src/lintCaseStyle.js +0 -129
  114. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.d.ts +0 -4
  115. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.js +0 -229
  116. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.d.ts +0 -47
  117. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.js +0 -52
  118. package/dist/legacy-root-azm/src/lowering/asmEquResolution.d.ts +0 -8
  119. package/dist/legacy-root-azm/src/lowering/asmEquResolution.js +0 -69
  120. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.d.ts +0 -15
  121. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.js +0 -102
  122. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.d.ts +0 -5
  123. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.js +0 -54
  124. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.d.ts +0 -46
  125. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.js +0 -51
  126. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.d.ts +0 -43
  127. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.js +0 -254
  128. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.d.ts +0 -23
  129. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.js +0 -1
  130. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.d.ts +0 -28
  131. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.js +0 -144
  132. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.d.ts +0 -17
  133. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.js +0 -39
  134. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.d.ts +0 -16
  135. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.js +0 -209
  136. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.d.ts +0 -4
  137. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.js +0 -9
  138. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.d.ts +0 -4
  139. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.js +0 -14
  140. package/dist/legacy-root-azm/src/lowering/asmUtils.d.ts +0 -13
  141. package/dist/legacy-root-azm/src/lowering/asmUtils.js +0 -105
  142. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.d.ts +0 -54
  143. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.js +0 -128
  144. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.d.ts +0 -151
  145. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.js +0 -16
  146. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.d.ts +0 -7
  147. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.js +0 -75
  148. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.d.ts +0 -66
  149. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.js +0 -166
  150. package/dist/legacy-root-azm/src/lowering/bytePlacement.d.ts +0 -7
  151. package/dist/legacy-root-azm/src/lowering/bytePlacement.js +0 -37
  152. package/dist/legacy-root-azm/src/lowering/capabilities.d.ts +0 -67
  153. package/dist/legacy-root-azm/src/lowering/capabilities.js +0 -1
  154. package/dist/legacy-root-azm/src/lowering/eaResolution.d.ts +0 -58
  155. package/dist/legacy-root-azm/src/lowering/eaResolution.js +0 -159
  156. package/dist/legacy-root-azm/src/lowering/emissionCore.d.ts +0 -17
  157. package/dist/legacy-root-azm/src/lowering/emissionCore.js +0 -21
  158. package/dist/legacy-root-azm/src/lowering/emit.d.ts +0 -17
  159. package/dist/legacy-root-azm/src/lowering/emit.js +0 -46
  160. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.d.ts +0 -63
  161. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.js +0 -41
  162. package/dist/legacy-root-azm/src/lowering/emitFinalization.d.ts +0 -61
  163. package/dist/legacy-root-azm/src/lowering/emitFinalization.js +0 -66
  164. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.d.ts +0 -19
  165. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.js +0 -26
  166. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -7
  167. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.js +0 -119
  168. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.d.ts +0 -4
  169. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.js +0 -12
  170. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.d.ts +0 -21
  171. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.js +0 -1
  172. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.d.ts +0 -70
  173. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.js +0 -203
  174. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.d.ts +0 -82
  175. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.js +0 -55
  176. package/dist/legacy-root-azm/src/lowering/emitPipeline.d.ts +0 -121
  177. package/dist/legacy-root-azm/src/lowering/emitPipeline.js +0 -57
  178. package/dist/legacy-root-azm/src/lowering/emitProgramContext.d.ts +0 -39
  179. package/dist/legacy-root-azm/src/lowering/emitProgramContext.js +0 -29
  180. package/dist/legacy-root-azm/src/lowering/emitState.d.ts +0 -90
  181. package/dist/legacy-root-azm/src/lowering/emitState.js +0 -124
  182. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.d.ts +0 -7
  183. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.js +0 -23
  184. package/dist/legacy-root-azm/src/lowering/fixupEmission.d.ts +0 -64
  185. package/dist/legacy-root-azm/src/lowering/fixupEmission.js +0 -199
  186. package/dist/legacy-root-azm/src/lowering/immMath.d.ts +0 -2
  187. package/dist/legacy-root-azm/src/lowering/immMath.js +0 -34
  188. package/dist/legacy-root-azm/src/lowering/inputAssets.d.ts +0 -7
  189. package/dist/legacy-root-azm/src/lowering/inputAssets.js +0 -106
  190. package/dist/legacy-root-azm/src/lowering/ldEncoding.d.ts +0 -15
  191. package/dist/legacy-root-azm/src/lowering/ldEncoding.js +0 -12
  192. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.d.ts +0 -5
  193. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.js +0 -124
  194. package/dist/legacy-root-azm/src/lowering/ldFormSelection.d.ts +0 -26
  195. package/dist/legacy-root-azm/src/lowering/ldFormSelection.js +0 -92
  196. package/dist/legacy-root-azm/src/lowering/ldLowering.d.ts +0 -7
  197. package/dist/legacy-root-azm/src/lowering/ldLowering.js +0 -13
  198. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.d.ts +0 -23
  199. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.js +0 -185
  200. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.d.ts +0 -13
  201. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.js +0 -86
  202. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.d.ts +0 -27
  203. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.js +0 -215
  204. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.d.ts +0 -202
  205. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.js +0 -1
  206. package/dist/legacy-root-azm/src/lowering/loweredFormat.d.ts +0 -3
  207. package/dist/legacy-root-azm/src/lowering/loweredFormat.js +0 -26
  208. package/dist/legacy-root-azm/src/lowering/loweredItemSize.d.ts +0 -4
  209. package/dist/legacy-root-azm/src/lowering/loweredItemSize.js +0 -17
  210. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.d.ts +0 -9
  211. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.js +0 -55
  212. package/dist/legacy-root-azm/src/lowering/loweringTypes.d.ts +0 -27
  213. package/dist/legacy-root-azm/src/lowering/loweringTypes.js +0 -1
  214. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.d.ts +0 -9
  215. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.js +0 -9
  216. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.d.ts +0 -15
  217. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.js +0 -45
  218. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.d.ts +0 -15
  219. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.js +0 -88
  220. package/dist/legacy-root-azm/src/lowering/opExpansionStream.d.ts +0 -12
  221. package/dist/legacy-root-azm/src/lowering/opExpansionStream.js +0 -176
  222. package/dist/legacy-root-azm/src/lowering/opMatching.d.ts +0 -52
  223. package/dist/legacy-root-azm/src/lowering/opMatching.js +0 -355
  224. package/dist/legacy-root-azm/src/lowering/opSubstitution.d.ts +0 -13
  225. package/dist/legacy-root-azm/src/lowering/opSubstitution.js +0 -175
  226. package/dist/legacy-root-azm/src/lowering/prescanTypes.d.ts +0 -7
  227. package/dist/legacy-root-azm/src/lowering/prescanTypes.js +0 -1
  228. package/dist/legacy-root-azm/src/lowering/programLowering.d.ts +0 -144
  229. package/dist/legacy-root-azm/src/lowering/programLowering.js +0 -2
  230. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.d.ts +0 -5
  231. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.js +0 -5
  232. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.d.ts +0 -18
  233. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.js +0 -115
  234. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.d.ts +0 -2
  235. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.js +0 -93
  236. package/dist/legacy-root-azm/src/lowering/programPrescan.d.ts +0 -3
  237. package/dist/legacy-root-azm/src/lowering/programPrescan.js +0 -37
  238. package/dist/legacy-root-azm/src/lowering/traceFormat.d.ts +0 -13
  239. package/dist/legacy-root-azm/src/lowering/traceFormat.js +0 -211
  240. package/dist/legacy-root-azm/src/packageInfo.d.ts +0 -1
  241. package/dist/legacy-root-azm/src/packageInfo.js +0 -15
  242. package/dist/legacy-root-azm/src/pathCompare.d.ts +0 -3
  243. package/dist/legacy-root-azm/src/pathCompare.js +0 -26
  244. package/dist/legacy-root-azm/src/pipeline.d.ts +0 -91
  245. package/dist/legacy-root-azm/src/pipeline.js +0 -1
  246. package/dist/legacy-root-azm/src/registerCare/analyze.d.ts +0 -24
  247. package/dist/legacy-root-azm/src/registerCare/analyze.js +0 -327
  248. package/dist/legacy-root-azm/src/registerCare/annotate.d.ts +0 -11
  249. package/dist/legacy-root-azm/src/registerCare/annotate.js +0 -76
  250. package/dist/legacy-root-azm/src/registerCare/boundaryHints.d.ts +0 -2
  251. package/dist/legacy-root-azm/src/registerCare/boundaryHints.js +0 -10
  252. package/dist/legacy-root-azm/src/registerCare/carriers.d.ts +0 -4
  253. package/dist/legacy-root-azm/src/registerCare/carriers.js +0 -78
  254. package/dist/legacy-root-azm/src/registerCare/controlFlow.d.ts +0 -5
  255. package/dist/legacy-root-azm/src/registerCare/controlFlow.js +0 -35
  256. package/dist/legacy-root-azm/src/registerCare/fix.d.ts +0 -11
  257. package/dist/legacy-root-azm/src/registerCare/fix.js +0 -119
  258. package/dist/legacy-root-azm/src/registerCare/liveness.d.ts +0 -7
  259. package/dist/legacy-root-azm/src/registerCare/liveness.js +0 -227
  260. package/dist/legacy-root-azm/src/registerCare/profiles.d.ts +0 -11
  261. package/dist/legacy-root-azm/src/registerCare/profiles.js +0 -45
  262. package/dist/legacy-root-azm/src/registerCare/programModel.d.ts +0 -3
  263. package/dist/legacy-root-azm/src/registerCare/programModel.js +0 -181
  264. package/dist/legacy-root-azm/src/registerCare/report.d.ts +0 -5
  265. package/dist/legacy-root-azm/src/registerCare/report.js +0 -139
  266. package/dist/legacy-root-azm/src/registerCare/smartComments.d.ts +0 -5
  267. package/dist/legacy-root-azm/src/registerCare/smartComments.js +0 -247
  268. package/dist/legacy-root-azm/src/registerCare/sourceText.d.ts +0 -8
  269. package/dist/legacy-root-azm/src/registerCare/sourceText.js +0 -15
  270. package/dist/legacy-root-azm/src/registerCare/summary.d.ts +0 -3
  271. package/dist/legacy-root-azm/src/registerCare/summary.js +0 -492
  272. package/dist/legacy-root-azm/src/registerCare/types.d.ts +0 -154
  273. package/dist/legacy-root-azm/src/registerCare/types.js +0 -1
  274. package/dist/legacy-root-azm/src/semantics/declVisitor.d.ts +0 -5
  275. package/dist/legacy-root-azm/src/semantics/declVisitor.js +0 -11
  276. package/dist/legacy-root-azm/src/semantics/env.d.ts +0 -28
  277. package/dist/legacy-root-azm/src/semantics/env.js +0 -432
  278. package/dist/legacy-root-azm/src/semantics/layout.d.ts +0 -21
  279. package/dist/legacy-root-azm/src/semantics/layout.js +0 -226
  280. package/dist/legacy-root-azm/src/semantics/layoutCastFold.d.ts +0 -22
  281. package/dist/legacy-root-azm/src/semantics/layoutCastFold.js +0 -118
  282. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.d.ts +0 -2
  283. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.js +0 -4
  284. package/dist/legacy-root-azm/src/semantics/typeQueries.d.ts +0 -31
  285. package/dist/legacy-root-azm/src/semantics/typeQueries.js +0 -124
  286. package/dist/legacy-root-azm/src/sourceIncludeExpansion.d.ts +0 -17
  287. package/dist/legacy-root-azm/src/sourceIncludeExpansion.js +0 -124
  288. package/dist/legacy-root-azm/src/sourceIncludePaths.d.ts +0 -1
  289. package/dist/legacy-root-azm/src/sourceIncludePaths.js +0 -12
  290. package/dist/legacy-root-azm/src/sourceLoader.d.ts +0 -15
  291. package/dist/legacy-root-azm/src/sourceLoader.js +0 -118
  292. package/dist/legacy-root-azm/src/z80/effects.d.ts +0 -3
  293. package/dist/legacy-root-azm/src/z80/effects.js +0 -516
  294. package/dist/legacy-root-azm/src/z80/encode.d.ts +0 -10
  295. package/dist/legacy-root-azm/src/z80/encode.js +0 -412
  296. package/dist/legacy-root-azm/src/z80/encodeAlu.d.ts +0 -7
  297. package/dist/legacy-root-azm/src/z80/encodeAlu.js +0 -219
  298. package/dist/legacy-root-azm/src/z80/encodeBitOps.d.ts +0 -7
  299. package/dist/legacy-root-azm/src/z80/encodeBitOps.js +0 -123
  300. package/dist/legacy-root-azm/src/z80/encodeContext.d.ts +0 -29
  301. package/dist/legacy-root-azm/src/z80/encodeContext.js +0 -1
  302. package/dist/legacy-root-azm/src/z80/encodeControl.d.ts +0 -26
  303. package/dist/legacy-root-azm/src/z80/encodeControl.js +0 -180
  304. package/dist/legacy-root-azm/src/z80/encodeCoreOps.d.ts +0 -7
  305. package/dist/legacy-root-azm/src/z80/encodeCoreOps.js +0 -131
  306. package/dist/legacy-root-azm/src/z80/encodeIo.d.ts +0 -9
  307. package/dist/legacy-root-azm/src/z80/encodeIo.js +0 -128
  308. package/dist/legacy-root-azm/src/z80/encodeLd.d.ts +0 -13
  309. package/dist/legacy-root-azm/src/z80/encodeLd.js +0 -273
  310. package/dist/legacy-root-azm/src/z80/encoderRegistry.d.ts +0 -13
  311. package/dist/legacy-root-azm/src/z80/encoderRegistry.js +0 -169
  312. package/dist/src/outputs/write-listing.d.ts +0 -2
  313. package/dist/src/outputs/write-listing.js +0 -79
@@ -1,102 +0,0 @@
1
- import { isConstantLayoutCastEa } from '../semantics/layoutCastFold.js';
2
- export function createAsmInstructionLdHelpers(ctx) {
3
- const isUnresolvedLayoutLdOperand = (op) => {
4
- if (op.kind === 'Ea') {
5
- if (isConstantLayoutCastEa(op.expr))
6
- return false;
7
- return true;
8
- }
9
- return false;
10
- };
11
- const resolveRawLabelName = (name) => ctx.resolveRawAliasTargetName(name) ?? name;
12
- const emitAbs16LdFixup = (dst, src, span) => {
13
- const dstName = dst.kind === 'Reg' ? dst.name.toUpperCase() : undefined;
14
- const srcName = src.kind === 'Reg' ? src.name.toUpperCase() : undefined;
15
- const memExpr = dst.kind === 'Mem' ? dst.expr : src.kind === 'Mem' ? src.expr : undefined;
16
- if (!memExpr || memExpr.kind !== 'EaName')
17
- return false;
18
- // Register-indirect `(hl)`, `(bc)`, `(de)`, `(ix)`, `(iy)` use `EaName`; these are not
19
- // the absolute-address `ld r/(nn)` forms handled below (see `isRegisterLikeMemEa`).
20
- // Labels that spell HL/BC/DE/IX/IY cannot use `(name)` for absolute memory here; `(hl)` is always HL indirect.
21
- if (ctx.reg16.has(memExpr.name.toUpperCase()))
22
- return false;
23
- const baseLower = resolveRawLabelName(memExpr.name).toLowerCase();
24
- if (dst.kind === 'Reg' && src.kind === 'Mem') {
25
- if (dstName === 'A') {
26
- ctx.emitAbs16Fixup(0x3a, baseLower, 0, span);
27
- return true;
28
- }
29
- if (dstName === 'HL') {
30
- ctx.emitAbs16Fixup(0x2a, baseLower, 0, span);
31
- return true;
32
- }
33
- if (dstName === 'BC') {
34
- ctx.emitAbs16FixupPrefixed(0xed, 0x4b, baseLower, 0, span);
35
- return true;
36
- }
37
- if (dstName === 'DE') {
38
- ctx.emitAbs16FixupPrefixed(0xed, 0x5b, baseLower, 0, span);
39
- return true;
40
- }
41
- if (dstName === 'SP') {
42
- ctx.emitAbs16FixupPrefixed(0xed, 0x7b, baseLower, 0, span);
43
- return true;
44
- }
45
- if (dstName === 'IX') {
46
- ctx.emitAbs16FixupPrefixed(0xdd, 0x2a, baseLower, 0, span);
47
- return true;
48
- }
49
- if (dstName === 'IY') {
50
- ctx.emitAbs16FixupPrefixed(0xfd, 0x2a, baseLower, 0, span);
51
- return true;
52
- }
53
- }
54
- if (dst.kind === 'Mem' && src.kind === 'Reg') {
55
- if (srcName === 'A') {
56
- ctx.emitAbs16Fixup(0x32, baseLower, 0, span);
57
- return true;
58
- }
59
- if (srcName === 'HL') {
60
- ctx.emitAbs16Fixup(0x22, baseLower, 0, span);
61
- return true;
62
- }
63
- if (srcName === 'BC') {
64
- ctx.emitAbs16FixupPrefixed(0xed, 0x43, baseLower, 0, span);
65
- return true;
66
- }
67
- if (srcName === 'DE') {
68
- ctx.emitAbs16FixupPrefixed(0xed, 0x53, baseLower, 0, span);
69
- return true;
70
- }
71
- if (srcName === 'SP') {
72
- ctx.emitAbs16FixupPrefixed(0xed, 0x73, baseLower, 0, span);
73
- return true;
74
- }
75
- if (srcName === 'IX') {
76
- ctx.emitAbs16FixupPrefixed(0xdd, 0x22, baseLower, 0, span);
77
- return true;
78
- }
79
- if (srcName === 'IY') {
80
- ctx.emitAbs16FixupPrefixed(0xfd, 0x22, baseLower, 0, span);
81
- return true;
82
- }
83
- }
84
- return false;
85
- };
86
- const isRegisterLikeMemEa = (ea) => {
87
- if (ea.kind === 'EaName') {
88
- return ctx.reg16.has(ea.name.toUpperCase());
89
- }
90
- if ((ea.kind === 'EaAdd' || ea.kind === 'EaSub') && ea.base.kind === 'EaName') {
91
- const base = ea.base.name.toUpperCase();
92
- return base === 'IX' || base === 'IY';
93
- }
94
- return false;
95
- };
96
- return {
97
- isUnresolvedLayoutLdOperand,
98
- resolveRawLabelName,
99
- emitAbs16LdFixup,
100
- isRegisterLikeMemEa,
101
- };
102
- }
@@ -1,5 +0,0 @@
1
- import type { AsmInstructionNode } from '../frontend/ast.js';
2
- import type { AsmLoweringHost } from './asmLoweringHost.js';
3
- export declare function createAsmInstructionLoweringHelpers(host: AsmLoweringHost): {
4
- lowerAsmInstructionDispatcher: (asmItem: AsmInstructionNode) => void;
5
- };
@@ -1,54 +0,0 @@
1
- import { createAsmInstructionLdHelpers } from './asmInstructionLdHelpers.js';
2
- import { tryLowerBranchCallInstruction } from './asmLoweringBranchCall.js';
3
- import { tryLowerLdInstruction } from './asmLoweringLd.js';
4
- export function createAsmInstructionLoweringHelpers(host) {
5
- const { isUnresolvedLayoutLdOperand, resolveRawLabelName, emitAbs16LdFixup, isRegisterLikeMemEa, } = createAsmInstructionLdHelpers(host);
6
- const lowerAsmInstructionDispatcher = (asmItem) => {
7
- const branchResult = tryLowerBranchCallInstruction(asmItem, host);
8
- if (branchResult !== undefined) {
9
- if (!branchResult)
10
- return;
11
- return;
12
- }
13
- const ldResult = tryLowerLdInstruction(asmItem, {
14
- diagnostics: host.diagnostics,
15
- diagAt: host.diagAt,
16
- emitAbs16Fixup: host.emitAbs16Fixup,
17
- emitAbs16FixupPrefixed: host.emitAbs16FixupPrefixed,
18
- evalImmExpr: host.evalImmExpr,
19
- symbolicTargetFromExpr: host.symbolicTargetFromExpr,
20
- resolveEa: host.resolveEa,
21
- lowerLdWithEa: host.lowerLdWithEa,
22
- emitAbs16LdFixup,
23
- isUnresolvedLayoutLdOperand,
24
- resolveRawLabelName,
25
- isRegisterLikeMemEa,
26
- syncToFlow: host.syncToFlow,
27
- });
28
- if (ldResult !== undefined) {
29
- if (!ldResult)
30
- return;
31
- return;
32
- }
33
- const head = asmItem.head.toLowerCase();
34
- if (head !== 'ld' && host.lowerLdWithEa(asmItem)) {
35
- host.syncToFlow();
36
- return;
37
- }
38
- if (host.emitVirtualReg16Transfer(asmItem)) {
39
- host.syncToFlow();
40
- return;
41
- }
42
- if (!host.emitInstr(asmItem.head, asmItem.operands, asmItem.span))
43
- return;
44
- if ((head === 'jp' || head === 'jr') && asmItem.operands.length === 1) {
45
- host.flowRef.current.reachable = false;
46
- }
47
- else if ((head === 'ret' || head === 'retn' || head === 'reti') &&
48
- asmItem.operands.length === 0) {
49
- host.flowRef.current.reachable = false;
50
- }
51
- host.syncToFlow();
52
- };
53
- return { lowerAsmInstructionDispatcher };
54
- }
@@ -1,46 +0,0 @@
1
- import { DiagnosticIds } from '../diagnosticTypes.js';
2
- import type { Diagnostic } from '../diagnosticTypes.js';
3
- import type { AsmInstructionNode, AsmOperandNode, EaExprNode, ImmExprNode, OpDeclNode, SourceSpan } from '../frontend/ast.js';
4
- import type { CompileEnv } from '../semantics/env.js';
5
- import type { SourceSegmentTag } from './loweringTypes.js';
6
- import type { OpOverloadSelection } from './opMatching.js';
7
- import type { FlowState, OpExpansionFrame } from './assemblerFlowSetup.js';
8
- type AsmInstructionStreamAddressingContext = {
9
- flattenEaDottedName: (ea: EaExprNode) => string | undefined;
10
- };
11
- type AsmInstructionStreamContext = {
12
- diagnostics: Diagnostic[];
13
- asmItemSpanSourceTag: (span: SourceSpan) => SourceSegmentTag;
14
- getCurrentCodeSegmentTag: () => SourceSegmentTag | undefined;
15
- setCurrentCodeSegmentTag: (tag: SourceSegmentTag | undefined) => void;
16
- appendInvalidOpExpansionDiagnostic: (asmItem: AsmInstructionNode, diagnosticsStart: number, stack: OpExpansionFrame[]) => void;
17
- addressing: Readonly<AsmInstructionStreamAddressingContext>;
18
- diagAt: (diagnostics: Diagnostic[], span: SourceSpan, message: string) => void;
19
- diagAtWithSeverityAndId: (diagnostics: Diagnostic[], span: SourceSpan, id: (typeof DiagnosticIds)[keyof typeof DiagnosticIds], severity: 'error' | 'warning', message: string) => void;
20
- env: CompileEnv;
21
- emitInstr: (head: string, operands: AsmOperandNode[], span: SourceSpan) => boolean;
22
- emitAbs16Fixup: (opcode: number, baseLower: string, addend: number, span: SourceSpan, asmText?: string) => void;
23
- syncToFlow: () => void;
24
- resolveOpCandidates: (name: string, file: string) => OpDeclNode[] | undefined;
25
- opExpansionStack: OpExpansionFrame[];
26
- diagAtWithId: (diagnostics: Diagnostic[], span: SourceSpan, id: (typeof DiagnosticIds)[keyof typeof DiagnosticIds], message: string) => void;
27
- formatAsmOperandForOpDiag: (operand: AsmOperandNode) => string;
28
- selectOpOverload: (overloads: OpDeclNode[], operands: AsmOperandNode[]) => OpOverloadSelection;
29
- cloneImmExpr: (expr: ImmExprNode) => ImmExprNode;
30
- cloneEaExpr: (expr: EaExprNode) => EaExprNode;
31
- cloneOperand: (operand: AsmOperandNode) => AsmOperandNode;
32
- normalizeFixedToken: (operand: AsmOperandNode) => string | undefined;
33
- inverseConditionName: (name: string) => string | undefined;
34
- newHiddenLabel: (prefix: string) => string;
35
- lowerAsmInstructionDispatcher: (asmItem: AsmInstructionNode) => void;
36
- defineCodeLabel: (name: string, span: SourceSpan, scope: 'global' | 'local') => void;
37
- flowRef: {
38
- readonly current: FlowState;
39
- };
40
- syncFromFlow: () => void;
41
- };
42
- export declare function createAsmInstructionStreamHelpers(ctx: AsmInstructionStreamContext): {
43
- emitAsmInstruction: (asmItem: AsmInstructionNode) => void;
44
- lowerAsmRange: (asmItems: readonly import("../frontend/ast.js").AsmItemNode[], startIndex: number, stopKinds: Set<string>) => number;
45
- };
46
- export {};
@@ -1,51 +0,0 @@
1
- import { createAsmRangeLoweringHelpers } from './asmRangeLowering.js';
2
- import { createOpExpansionOrchestrationHelpers } from './opExpansionOrchestration.js';
3
- export function createAsmInstructionStreamHelpers(ctx) {
4
- const emitAsmInstruction = (asmItem) => {
5
- const prevTag = ctx.getCurrentCodeSegmentTag();
6
- const diagnosticsStart = ctx.diagnostics.length;
7
- ctx.setCurrentCodeSegmentTag(ctx.asmItemSpanSourceTag(asmItem.span));
8
- try {
9
- const { tryHandleOpExpansion } = createOpExpansionOrchestrationHelpers({
10
- resolveOpCandidates: ctx.resolveOpCandidates,
11
- diagnostics: ctx.diagnostics,
12
- env: ctx.env,
13
- opExpansionStack: ctx.opExpansionStack,
14
- diagAt: ctx.diagAt,
15
- diagAtWithId: ctx.diagAtWithId,
16
- diagAtWithSeverityAndId: ctx.diagAtWithSeverityAndId,
17
- formatAsmOperandForOpDiag: ctx.formatAsmOperandForOpDiag,
18
- selectOpOverload: ctx.selectOpOverload,
19
- cloneImmExpr: ctx.cloneImmExpr,
20
- cloneEaExpr: ctx.cloneEaExpr,
21
- cloneOperand: ctx.cloneOperand,
22
- flattenEaDottedName: ctx.addressing.flattenEaDottedName,
23
- normalizeFixedToken: ctx.normalizeFixedToken,
24
- inverseConditionName: ctx.inverseConditionName,
25
- newHiddenLabel: ctx.newHiddenLabel,
26
- lowerAsmRange,
27
- syncToFlow: ctx.syncToFlow,
28
- });
29
- if (tryHandleOpExpansion(asmItem))
30
- return;
31
- ctx.lowerAsmInstructionDispatcher(asmItem);
32
- }
33
- finally {
34
- ctx.appendInvalidOpExpansionDiagnostic(asmItem, diagnosticsStart, ctx.opExpansionStack);
35
- ctx.setCurrentCodeSegmentTag(prevTag);
36
- }
37
- };
38
- const { lowerAsmRange } = createAsmRangeLoweringHelpers({
39
- sourceTagForSpan: ctx.asmItemSpanSourceTag,
40
- getCurrentCodeSegmentTag: ctx.getCurrentCodeSegmentTag,
41
- setCurrentCodeSegmentTag: ctx.setCurrentCodeSegmentTag,
42
- defineCodeLabel: ctx.defineCodeLabel,
43
- emitAsmInstruction,
44
- flowRef: ctx.flowRef,
45
- syncFromFlow: ctx.syncFromFlow,
46
- });
47
- return {
48
- emitAsmInstruction,
49
- lowerAsmRange,
50
- };
51
- }
@@ -1,43 +0,0 @@
1
- import { DiagnosticIds, type Diagnostic } from '../diagnosticTypes.js';
2
- import type { AsmInstructionNode, AsmOperandNode } from '../frontend/ast.js';
3
- type DiagAt = (diagnostics: Diagnostic[], span: AsmInstructionNode['span'], message: string) => void;
4
- type DiagAtWithId = (diagnostics: Diagnostic[], span: AsmInstructionNode['span'], id: (typeof DiagnosticIds)[keyof typeof DiagnosticIds], message: string) => void;
5
- export type BranchCallLoweringContext = {
6
- diagnostics: Diagnostic[];
7
- diagAt: DiagAt;
8
- diagAtWithId: DiagAtWithId;
9
- emitInstr: (head: string, operands: AsmOperandNode[], span: AsmInstructionNode['span']) => boolean;
10
- emitRawCodeBytes: (bytes: Uint8Array, file: string, asmText: string) => void;
11
- emitAbs16Fixup: (opcode: number, baseLower: string, addend: number, span: AsmInstructionNode['span']) => void;
12
- emitRel8Fixup: (opcode: number, baseLower: string, addend: number, span: AsmInstructionNode['span'], mnemonic: string, asmText?: string) => void;
13
- conditionOpcodeFromName: (nameRaw: string) => number | undefined;
14
- callConditionOpcodeFromName: (nameRaw: string) => number | undefined;
15
- jrConditionOpcodeFromName: (nameRaw: string) => number | undefined;
16
- conditionOpcode: (op: AsmOperandNode) => number | undefined;
17
- symbolicTargetFromExpr: (expr: Extract<AsmOperandNode, {
18
- kind: 'Imm';
19
- }>['expr']) => {
20
- baseLower: string;
21
- addend: number;
22
- } | undefined;
23
- evalImmExpr: (expr: Extract<AsmOperandNode, {
24
- kind: 'Imm';
25
- }>['expr']) => number | undefined;
26
- currentAddress: () => number;
27
- evalCurrentTarget?: (expr: Extract<AsmOperandNode, {
28
- kind: 'Imm';
29
- }>['expr']) => number | undefined;
30
- diagIfRetStackImbalanced: (span: AsmInstructionNode['span'], mnemonic?: string) => void;
31
- diagIfCallStackUnverifiable: (options: {
32
- span: AsmInstructionNode['span'];
33
- mnemonic?: string;
34
- }) => void;
35
- syncToFlow: () => void;
36
- flowRef: {
37
- current: {
38
- reachable: boolean;
39
- };
40
- };
41
- };
42
- export declare function tryLowerBranchCallInstruction(asmItem: AsmInstructionNode, ctx: BranchCallLoweringContext): boolean | undefined;
43
- export {};
@@ -1,254 +0,0 @@
1
- import { DiagnosticIds } from '../diagnosticTypes.js';
2
- function diagEncode(ctx, asmItem, message) {
3
- ctx.diagAtWithId(ctx.diagnostics, asmItem.span, DiagnosticIds.EncodeError, message);
4
- }
5
- const emitRel8FromOperand = (ctx, asmItem, operand, opcode, mnemonic) => {
6
- if (operand.kind !== 'Imm') {
7
- if (mnemonic === 'djnz' || mnemonic.startsWith('jr')) {
8
- diagEncode(ctx, asmItem, `${mnemonic} expects disp8`);
9
- }
10
- else {
11
- diagEncode(ctx, asmItem, `${mnemonic} expects an immediate target.`);
12
- }
13
- return false;
14
- }
15
- const symbolicTarget = ctx.symbolicTargetFromExpr(operand.expr);
16
- if (symbolicTarget) {
17
- ctx.emitRel8Fixup(opcode, symbolicTarget.baseLower, symbolicTarget.addend, asmItem.span, mnemonic);
18
- return true;
19
- }
20
- const currentTarget = ctx.evalCurrentTarget?.(operand.expr);
21
- if (currentTarget !== undefined) {
22
- const currentRelativeValue = currentTarget - (ctx.currentAddress() + 2);
23
- if (currentRelativeValue < -128 || currentRelativeValue > 127) {
24
- diagEncode(ctx, asmItem, `${mnemonic} relative branch displacement out of range (-128..127): ${currentRelativeValue}.`);
25
- return false;
26
- }
27
- ctx.emitRawCodeBytes(Uint8Array.of(opcode, currentRelativeValue & 0xff), asmItem.span.file, `${mnemonic} ${currentRelativeValue}`);
28
- return true;
29
- }
30
- const value = ctx.evalImmExpr(operand.expr);
31
- if (value === undefined) {
32
- diagEncode(ctx, asmItem, `Failed to evaluate ${mnemonic} target.`);
33
- return false;
34
- }
35
- if (value < -128 || value > 127) {
36
- diagEncode(ctx, asmItem, `${mnemonic} relative branch displacement out of range (-128..127): ${value}.`);
37
- return false;
38
- }
39
- ctx.emitRawCodeBytes(Uint8Array.of(opcode, value & 0xff), asmItem.span.file, `${mnemonic} ${value}`);
40
- return true;
41
- };
42
- function conditionNameFromOperand(op) {
43
- if (op.kind === 'Imm' && op.expr.kind === 'ImmName')
44
- return op.expr.name;
45
- if (op.kind === 'Reg')
46
- return op.name;
47
- return undefined;
48
- }
49
- function rejectInvalidRel8Target(ctx, asmItem, target, messages) {
50
- if (target.kind === 'Mem') {
51
- diagEncode(ctx, asmItem, messages.indirect);
52
- return true;
53
- }
54
- if (target.kind === 'Reg') {
55
- diagEncode(ctx, asmItem, messages.register);
56
- return true;
57
- }
58
- if (target.kind !== 'Imm') {
59
- diagEncode(ctx, asmItem, messages.other);
60
- return true;
61
- }
62
- return false;
63
- }
64
- function emitAbs16CurrentTargetFromOperand(ctx, asmItem, target, opcode) {
65
- if (target.kind !== 'Imm')
66
- return false;
67
- const value = ctx.evalCurrentTarget?.(target.expr);
68
- if (value === undefined)
69
- return false;
70
- if (value < 0 || value > 0xffff) {
71
- diagEncode(ctx, asmItem, `16-bit branch target out of range: ${value}.`);
72
- return true;
73
- }
74
- ctx.emitRawCodeBytes(Uint8Array.of(opcode, value & 0xff, (value >> 8) & 0xff), asmItem.span.file, `${asmItem.head.toLowerCase()} ${value}`);
75
- ctx.syncToFlow();
76
- return true;
77
- }
78
- function emitAbs16FixupFromOperand(ctx, asmItem, operand, opcode) {
79
- if (operand.kind !== 'Imm')
80
- return false;
81
- const symbolicTarget = ctx.symbolicTargetFromExpr(operand.expr);
82
- if (!symbolicTarget)
83
- return false;
84
- ctx.emitAbs16Fixup(opcode, symbolicTarget.baseLower, symbolicTarget.addend, asmItem.span);
85
- ctx.syncToFlow();
86
- return true;
87
- }
88
- export function tryLowerBranchCallInstruction(asmItem, ctx) {
89
- const head = asmItem.head.toLowerCase();
90
- if (head === 'call') {
91
- ctx.diagIfCallStackUnverifiable({ span: asmItem.span });
92
- }
93
- if (head === 'jr') {
94
- if (asmItem.operands.length === 1) {
95
- if (asmItem.operands[0].kind === 'Mem') {
96
- diagEncode(ctx, asmItem, `jr does not support indirect targets; expects disp8`);
97
- return true;
98
- }
99
- const single = asmItem.operands[0];
100
- const ccSingle = conditionNameFromOperand(single);
101
- if (ccSingle && ctx.jrConditionOpcodeFromName(ccSingle) !== undefined) {
102
- diagEncode(ctx, asmItem, `jr cc, disp expects two operands (cc, disp8)`);
103
- return true;
104
- }
105
- if (single.kind === 'Imm') {
106
- const symbolicTarget = ctx.symbolicTargetFromExpr(single.expr);
107
- if (symbolicTarget &&
108
- ctx.jrConditionOpcodeFromName(symbolicTarget.baseLower) !== undefined) {
109
- diagEncode(ctx, asmItem, `jr cc, disp expects two operands (cc, disp8)`);
110
- return true;
111
- }
112
- }
113
- if (single.kind === 'Reg') {
114
- diagEncode(ctx, asmItem, `jr does not support register targets; expects disp8`);
115
- return true;
116
- }
117
- if (!emitRel8FromOperand(ctx, asmItem, single, 0x18, 'jr'))
118
- return false;
119
- ctx.flowRef.current.reachable = false;
120
- ctx.syncToFlow();
121
- return true;
122
- }
123
- if (asmItem.operands.length === 2) {
124
- const ccOp = asmItem.operands[0];
125
- const ccName = conditionNameFromOperand(ccOp);
126
- const opcode = ccName ? ctx.jrConditionOpcodeFromName(ccName) : undefined;
127
- if (opcode === undefined) {
128
- diagEncode(ctx, asmItem, `jr cc expects valid condition code NZ/Z/NC/C`);
129
- return true;
130
- }
131
- const target = asmItem.operands[1];
132
- if (rejectInvalidRel8Target(ctx, asmItem, target, {
133
- indirect: 'jr cc, disp does not support indirect targets',
134
- register: 'jr cc, disp does not support register targets; expects disp8',
135
- other: 'jr cc, disp expects disp8',
136
- })) {
137
- return true;
138
- }
139
- if (!emitRel8FromOperand(ctx, asmItem, target, opcode, `jr ${ccName.toLowerCase()}`))
140
- return false;
141
- ctx.syncToFlow();
142
- return true;
143
- }
144
- }
145
- if (head === 'djnz') {
146
- if (asmItem.operands.length !== 1) {
147
- diagEncode(ctx, asmItem, `djnz expects one operand (disp8)`);
148
- return true;
149
- }
150
- const target = asmItem.operands[0];
151
- if (rejectInvalidRel8Target(ctx, asmItem, target, {
152
- indirect: 'djnz does not support indirect targets; expects disp8',
153
- register: 'djnz does not support register targets; expects disp8',
154
- other: 'djnz expects disp8',
155
- })) {
156
- return true;
157
- }
158
- if (!emitRel8FromOperand(ctx, asmItem, target, 0x10, 'djnz'))
159
- return false;
160
- ctx.syncToFlow();
161
- return true;
162
- }
163
- if (head === 'rst' && asmItem.operands.length === 1) {
164
- ctx.diagIfCallStackUnverifiable({ span: asmItem.span, mnemonic: 'rst' });
165
- }
166
- if (head === 'ret') {
167
- if (asmItem.operands.length === 0) {
168
- ctx.diagIfRetStackImbalanced(asmItem.span);
169
- ctx.emitInstr('ret', [], asmItem.span);
170
- ctx.flowRef.current.reachable = false;
171
- ctx.syncToFlow();
172
- return true;
173
- }
174
- if (asmItem.operands.length === 1) {
175
- const op = ctx.conditionOpcode(asmItem.operands[0]);
176
- if (op === undefined) {
177
- diagEncode(ctx, asmItem, `ret cc expects a valid condition code`);
178
- return true;
179
- }
180
- ctx.diagIfRetStackImbalanced(asmItem.span);
181
- ctx.emitInstr('ret', [asmItem.operands[0]], asmItem.span);
182
- ctx.syncToFlow();
183
- return true;
184
- }
185
- }
186
- if ((head === 'retn' || head === 'reti') && asmItem.operands.length === 0) {
187
- ctx.diagIfRetStackImbalanced(asmItem.span, head);
188
- ctx.emitInstr(head, [], asmItem.span);
189
- ctx.flowRef.current.reachable = false;
190
- ctx.syncToFlow();
191
- return true;
192
- }
193
- if (head === 'jp' && asmItem.operands.length === 1) {
194
- const target = asmItem.operands[0];
195
- if (target.kind === 'Imm') {
196
- const symbolicTarget = ctx.symbolicTargetFromExpr(target.expr);
197
- if (symbolicTarget && ctx.conditionOpcodeFromName(symbolicTarget.baseLower) !== undefined) {
198
- diagEncode(ctx, asmItem, `jp cc, nn expects two operands (cc, nn)`);
199
- return true;
200
- }
201
- if (symbolicTarget) {
202
- ctx.emitAbs16Fixup(0xc3, symbolicTarget.baseLower, symbolicTarget.addend, asmItem.span);
203
- ctx.flowRef.current.reachable = false;
204
- ctx.syncToFlow();
205
- return true;
206
- }
207
- if (emitAbs16CurrentTargetFromOperand(ctx, asmItem, target, 0xc3)) {
208
- ctx.flowRef.current.reachable = false;
209
- return true;
210
- }
211
- }
212
- }
213
- if (head === 'jp' && asmItem.operands.length === 2) {
214
- const ccOp = asmItem.operands[0];
215
- const ccName = conditionNameFromOperand(ccOp);
216
- const opcode = ccName ? ctx.conditionOpcodeFromName(ccName) : undefined;
217
- const target = asmItem.operands[1];
218
- if (opcode !== undefined &&
219
- (emitAbs16CurrentTargetFromOperand(ctx, asmItem, target, opcode) ||
220
- emitAbs16FixupFromOperand(ctx, asmItem, target, opcode))) {
221
- return true;
222
- }
223
- }
224
- if (head === 'call' && asmItem.operands.length === 1) {
225
- const target = asmItem.operands[0];
226
- if (target.kind === 'Imm') {
227
- const symbolicTarget = ctx.symbolicTargetFromExpr(target.expr);
228
- if (symbolicTarget &&
229
- ctx.callConditionOpcodeFromName(symbolicTarget.baseLower) !== undefined) {
230
- diagEncode(ctx, asmItem, `call cc, nn expects two operands (cc, nn)`);
231
- return true;
232
- }
233
- if (symbolicTarget) {
234
- ctx.emitAbs16Fixup(0xcd, symbolicTarget.baseLower, symbolicTarget.addend, asmItem.span);
235
- ctx.syncToFlow();
236
- return true;
237
- }
238
- if (emitAbs16CurrentTargetFromOperand(ctx, asmItem, target, 0xcd))
239
- return true;
240
- }
241
- }
242
- if (head === 'call' && asmItem.operands.length === 2) {
243
- const ccOp = asmItem.operands[0];
244
- const ccName = conditionNameFromOperand(ccOp);
245
- const opcode = ccName ? ctx.callConditionOpcodeFromName(ccName) : undefined;
246
- const target = asmItem.operands[1];
247
- if (opcode !== undefined &&
248
- (emitAbs16CurrentTargetFromOperand(ctx, asmItem, target, opcode) ||
249
- emitAbs16FixupFromOperand(ctx, asmItem, target, opcode))) {
250
- return true;
251
- }
252
- }
253
- return undefined;
254
- }
@@ -1,23 +0,0 @@
1
- import type { AsmInstructionNode } from '../frontend/ast.js';
2
- import type { BranchCallLoweringContext } from './asmLoweringBranchCall.js';
3
- import type { LdHelperContext } from './asmInstructionLdHelpers.js';
4
- import type { LdLoweringContext } from './asmLoweringLd.js';
5
- /**
6
- * Fields required by {@link createAsmInstructionLdHelpers} beyond what
7
- * {@link BranchCallLoweringContext} already provides (`emitInstr`, `emitAbs16Fixup`).
8
- */
9
- type AsmLoweringLdHelperSlice = Omit<LdHelperContext, 'emitInstr' | 'emitAbs16Fixup'>;
10
- type AsmLoweringLdSlice = Pick<LdLoweringContext, 'resolveEa' | 'symbolicTargetFromExpr'>;
11
- /**
12
- * Dispatcher path shared by the non-`ld` `lowerLdWithEa` fallback.
13
- */
14
- type AsmLoweringDispatcherSlice = {
15
- lowerLdWithEa: (asmItem: AsmInstructionNode) => boolean;
16
- };
17
- /**
18
- * Narrow surface for {@link createAsmInstructionLoweringHelpers}: branch/call, LD helpers,
19
- * and raw-instruction fallback. Composed from helper-family contracts plus LD-helper
20
- * and dispatcher-only fields.
21
- */
22
- export type AsmLoweringHost = BranchCallLoweringContext & AsmLoweringLdHelperSlice & AsmLoweringLdSlice & AsmLoweringDispatcherSlice;
23
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,28 +0,0 @@
1
- import type { Diagnostic } from '../diagnosticTypes.js';
2
- import type { AsmInstructionNode, AsmOperandNode, EaExprNode, SourceSpan } from '../frontend/ast.js';
3
- import type { EaResolution } from './eaResolution.js';
4
- type DiagAt = (diagnostics: Diagnostic[], span: AsmInstructionNode['span'], message: string) => void;
5
- export type LdLoweringContext = {
6
- diagnostics: Diagnostic[];
7
- diagAt: DiagAt;
8
- emitAbs16Fixup: (opcode: number, baseLower: string, addend: number, span: AsmInstructionNode['span']) => void;
9
- emitAbs16FixupPrefixed: (prefix: number, opcode2: number, baseLower: string, addend: number, span: AsmInstructionNode['span']) => void;
10
- evalImmExpr: (expr: Extract<AsmOperandNode, {
11
- kind: 'Imm';
12
- }>['expr']) => number | undefined;
13
- symbolicTargetFromExpr: (expr: Extract<AsmOperandNode, {
14
- kind: 'Imm';
15
- }>['expr']) => {
16
- baseLower: string;
17
- addend: number;
18
- } | undefined;
19
- resolveEa: (ea: EaExprNode, span: SourceSpan) => EaResolution | undefined;
20
- lowerLdWithEa: (asmItem: AsmInstructionNode) => boolean;
21
- emitAbs16LdFixup: (dst: AsmOperandNode, src: AsmOperandNode, span: AsmInstructionNode['span']) => boolean;
22
- isUnresolvedLayoutLdOperand: (op: AsmOperandNode) => boolean;
23
- resolveRawLabelName: (name: string) => string;
24
- isRegisterLikeMemEa: (ea: EaExprNode) => boolean;
25
- syncToFlow: () => void;
26
- };
27
- export declare function tryLowerLdInstruction(asmItem: AsmInstructionNode, ctx: LdLoweringContext): boolean | undefined;
28
- export {};