@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.
Files changed (334) hide show
  1. package/README.md +110 -78
  2. package/dist/src/api-compile.d.ts +0 -2
  3. package/dist/src/api-compile.js +2 -9
  4. package/dist/src/assembly/address-planning.js +21 -1
  5. package/dist/src/assembly/program-emission.js +1 -0
  6. package/dist/src/cli/parse-args.d.ts +0 -1
  7. package/dist/src/cli/parse-args.js +0 -7
  8. package/dist/src/cli/write-artifacts.js +0 -11
  9. package/dist/src/core/compile.js +192 -9
  10. package/dist/src/expansion/op-expansion.js +2 -0
  11. package/dist/src/model/expression.d.ts +4 -0
  12. package/dist/src/model/source-item.d.ts +11 -0
  13. package/dist/src/outputs/index.js +0 -2
  14. package/dist/src/outputs/types.d.ts +3 -16
  15. package/dist/src/outputs/write-asm80.js +206 -5
  16. package/dist/src/register-care/analyze.js +36 -8
  17. package/dist/src/register-care/annotations.js +33 -146
  18. package/dist/src/register-care/fix.d.ts +2 -0
  19. package/dist/src/register-care/fix.js +52 -0
  20. package/dist/src/register-care/instruction-shape.d.ts +11 -0
  21. package/dist/src/register-care/instruction-shape.js +129 -0
  22. package/dist/src/register-care/liveness.js +15 -7
  23. package/dist/src/register-care/profiles.js +4 -0
  24. package/dist/src/register-care/programModel.js +79 -13
  25. package/dist/src/register-care/report.d.ts +2 -1
  26. package/dist/src/register-care/report.js +91 -34
  27. package/dist/src/register-care/routine-summaries.d.ts +6 -0
  28. package/dist/src/register-care/routine-summaries.js +89 -0
  29. package/dist/src/register-care/summaries.d.ts +3 -3
  30. package/dist/src/register-care/summaries.js +42 -75
  31. package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.js +33 -51
  32. package/dist/src/register-care/types.d.ts +6 -1
  33. package/dist/src/semantics/expression-evaluation.d.ts +7 -3
  34. package/dist/src/semantics/expression-evaluation.js +57 -0
  35. package/dist/src/source/strip-line-comment.d.ts +2 -0
  36. package/dist/src/source/strip-line-comment.js +26 -0
  37. package/dist/src/syntax/directive-aliases.js +9 -10
  38. package/dist/src/syntax/parse-diagnostics.d.ts +12 -0
  39. package/dist/src/syntax/parse-diagnostics.js +18 -0
  40. package/dist/src/syntax/parse-expression.js +34 -9
  41. package/dist/src/syntax/parse-line.js +150 -54
  42. package/dist/src/tooling/case-style.js +3 -0
  43. package/docs/reference/cli.md +6 -4
  44. package/docs/reference/tooling-api.md +13 -9
  45. package/package.json +4 -6
  46. package/dist/legacy-root-azm/src/analysis.d.ts +0 -11
  47. package/dist/legacy-root-azm/src/analysis.js +0 -41
  48. package/dist/legacy-root-azm/src/compile.d.ts +0 -10
  49. package/dist/legacy-root-azm/src/compile.js +0 -186
  50. package/dist/legacy-root-azm/src/compileShared.d.ts +0 -3
  51. package/dist/legacy-root-azm/src/compileShared.js +0 -7
  52. package/dist/legacy-root-azm/src/diagnosticTypes.d.ts +0 -77
  53. package/dist/legacy-root-azm/src/diagnosticTypes.js +0 -53
  54. package/dist/legacy-root-azm/src/formats/index.d.ts +0 -7
  55. package/dist/legacy-root-azm/src/formats/index.js +0 -17
  56. package/dist/legacy-root-azm/src/formats/range.d.ts +0 -17
  57. package/dist/legacy-root-azm/src/formats/range.js +0 -45
  58. package/dist/legacy-root-azm/src/formats/types.d.ts +0 -283
  59. package/dist/legacy-root-azm/src/formats/types.js +0 -1
  60. package/dist/legacy-root-azm/src/formats/writeAsm80.d.ts +0 -6
  61. package/dist/legacy-root-azm/src/formats/writeAsm80.js +0 -86
  62. package/dist/legacy-root-azm/src/formats/writeBin.d.ts +0 -7
  63. package/dist/legacy-root-azm/src/formats/writeBin.js +0 -23
  64. package/dist/legacy-root-azm/src/formats/writeD8m.d.ts +0 -9
  65. package/dist/legacy-root-azm/src/formats/writeD8m.js +0 -245
  66. package/dist/legacy-root-azm/src/formats/writeHex.d.ts +0 -8
  67. package/dist/legacy-root-azm/src/formats/writeHex.js +0 -38
  68. package/dist/legacy-root-azm/src/formats/writeListing.d.ts +0 -8
  69. package/dist/legacy-root-azm/src/formats/writeListing.js +0 -83
  70. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.d.ts +0 -39
  71. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.js +0 -89
  72. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.d.ts +0 -4
  73. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.js +0 -94
  74. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.d.ts +0 -10
  75. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.js +0 -25
  76. package/dist/legacy-root-azm/src/frontend/ast.d.ts +0 -376
  77. package/dist/legacy-root-azm/src/frontend/ast.js +0 -1
  78. package/dist/legacy-root-azm/src/frontend/directiveAliases.d.ts +0 -14
  79. package/dist/legacy-root-azm/src/frontend/directiveAliases.js +0 -189
  80. package/dist/legacy-root-azm/src/frontend/grammarData.d.ts +0 -14
  81. package/dist/legacy-root-azm/src/frontend/grammarData.js +0 -65
  82. package/dist/legacy-root-azm/src/frontend/immExprUtils.d.ts +0 -2
  83. package/dist/legacy-root-azm/src/frontend/immExprUtils.js +0 -12
  84. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.d.ts +0 -17
  85. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.js +0 -187
  86. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.d.ts +0 -3
  87. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.js +0 -73
  88. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.d.ts +0 -6
  89. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.js +0 -16
  90. package/dist/legacy-root-azm/src/frontend/parseAsmStream.d.ts +0 -10
  91. package/dist/legacy-root-azm/src/frontend/parseAsmStream.js +0 -33
  92. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.d.ts +0 -18
  93. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.js +0 -34
  94. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.d.ts +0 -9
  95. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.js +0 -16
  96. package/dist/legacy-root-azm/src/frontend/parseEnum.d.ts +0 -12
  97. package/dist/legacy-root-azm/src/frontend/parseEnum.js +0 -70
  98. package/dist/legacy-root-azm/src/frontend/parseImm.d.ts +0 -10
  99. package/dist/legacy-root-azm/src/frontend/parseImm.js +0 -397
  100. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.d.ts +0 -11
  101. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.js +0 -94
  102. package/dist/legacy-root-azm/src/frontend/parseOp.d.ts +0 -25
  103. package/dist/legacy-root-azm/src/frontend/parseOp.js +0 -120
  104. package/dist/legacy-root-azm/src/frontend/parseOpHeader.d.ts +0 -20
  105. package/dist/legacy-root-azm/src/frontend/parseOpHeader.js +0 -32
  106. package/dist/legacy-root-azm/src/frontend/parseOperands.d.ts +0 -4
  107. package/dist/legacy-root-azm/src/frontend/parseOperands.js +0 -290
  108. package/dist/legacy-root-azm/src/frontend/parseParams.d.ts +0 -6
  109. package/dist/legacy-root-azm/src/frontend/parseParams.js +0 -62
  110. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.d.ts +0 -12
  111. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.js +0 -17
  112. package/dist/legacy-root-azm/src/frontend/parseParserShared.d.ts +0 -2
  113. package/dist/legacy-root-azm/src/frontend/parseParserShared.js +0 -8
  114. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.d.ts +0 -1
  115. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.js +0 -3
  116. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.d.ts +0 -7
  117. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.js +0 -142
  118. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.d.ts +0 -34
  119. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.js +0 -177
  120. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.d.ts +0 -46
  121. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.js +0 -53
  122. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.d.ts +0 -16
  123. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.js +0 -68
  124. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.d.ts +0 -11
  125. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.js +0 -50
  126. package/dist/legacy-root-azm/src/frontend/parseTypes.d.ts +0 -24
  127. package/dist/legacy-root-azm/src/frontend/parseTypes.js +0 -77
  128. package/dist/legacy-root-azm/src/frontend/parser.d.ts +0 -11
  129. package/dist/legacy-root-azm/src/frontend/parser.js +0 -88
  130. package/dist/legacy-root-azm/src/frontend/source.d.ts +0 -28
  131. package/dist/legacy-root-azm/src/frontend/source.js +0 -58
  132. package/dist/legacy-root-azm/src/frontend/sourceExtensions.d.ts +0 -2
  133. package/dist/legacy-root-azm/src/frontend/sourceExtensions.js +0 -6
  134. package/dist/legacy-root-azm/src/lintCaseStyle.d.ts +0 -4
  135. package/dist/legacy-root-azm/src/lintCaseStyle.js +0 -129
  136. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.d.ts +0 -4
  137. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.js +0 -229
  138. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.d.ts +0 -47
  139. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.js +0 -52
  140. package/dist/legacy-root-azm/src/lowering/asmEquResolution.d.ts +0 -8
  141. package/dist/legacy-root-azm/src/lowering/asmEquResolution.js +0 -69
  142. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.d.ts +0 -15
  143. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.js +0 -102
  144. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.d.ts +0 -5
  145. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.js +0 -54
  146. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.d.ts +0 -46
  147. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.js +0 -51
  148. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.d.ts +0 -43
  149. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.js +0 -254
  150. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.d.ts +0 -23
  151. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.js +0 -1
  152. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.d.ts +0 -28
  153. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.js +0 -144
  154. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.d.ts +0 -17
  155. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.js +0 -39
  156. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.d.ts +0 -16
  157. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.js +0 -209
  158. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.d.ts +0 -4
  159. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.js +0 -9
  160. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.d.ts +0 -4
  161. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.js +0 -14
  162. package/dist/legacy-root-azm/src/lowering/asmUtils.d.ts +0 -13
  163. package/dist/legacy-root-azm/src/lowering/asmUtils.js +0 -105
  164. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.d.ts +0 -54
  165. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.js +0 -128
  166. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.d.ts +0 -151
  167. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.js +0 -16
  168. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.d.ts +0 -7
  169. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.js +0 -75
  170. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.d.ts +0 -66
  171. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.js +0 -166
  172. package/dist/legacy-root-azm/src/lowering/bytePlacement.d.ts +0 -7
  173. package/dist/legacy-root-azm/src/lowering/bytePlacement.js +0 -37
  174. package/dist/legacy-root-azm/src/lowering/capabilities.d.ts +0 -67
  175. package/dist/legacy-root-azm/src/lowering/capabilities.js +0 -1
  176. package/dist/legacy-root-azm/src/lowering/eaResolution.d.ts +0 -58
  177. package/dist/legacy-root-azm/src/lowering/eaResolution.js +0 -159
  178. package/dist/legacy-root-azm/src/lowering/emissionCore.d.ts +0 -17
  179. package/dist/legacy-root-azm/src/lowering/emissionCore.js +0 -21
  180. package/dist/legacy-root-azm/src/lowering/emit.d.ts +0 -17
  181. package/dist/legacy-root-azm/src/lowering/emit.js +0 -46
  182. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.d.ts +0 -63
  183. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.js +0 -41
  184. package/dist/legacy-root-azm/src/lowering/emitFinalization.d.ts +0 -61
  185. package/dist/legacy-root-azm/src/lowering/emitFinalization.js +0 -66
  186. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.d.ts +0 -19
  187. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.js +0 -26
  188. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -7
  189. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.js +0 -119
  190. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.d.ts +0 -4
  191. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.js +0 -12
  192. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.d.ts +0 -21
  193. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.js +0 -1
  194. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.d.ts +0 -70
  195. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.js +0 -203
  196. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.d.ts +0 -82
  197. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.js +0 -55
  198. package/dist/legacy-root-azm/src/lowering/emitPipeline.d.ts +0 -121
  199. package/dist/legacy-root-azm/src/lowering/emitPipeline.js +0 -57
  200. package/dist/legacy-root-azm/src/lowering/emitProgramContext.d.ts +0 -39
  201. package/dist/legacy-root-azm/src/lowering/emitProgramContext.js +0 -29
  202. package/dist/legacy-root-azm/src/lowering/emitState.d.ts +0 -90
  203. package/dist/legacy-root-azm/src/lowering/emitState.js +0 -124
  204. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.d.ts +0 -7
  205. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.js +0 -23
  206. package/dist/legacy-root-azm/src/lowering/fixupEmission.d.ts +0 -64
  207. package/dist/legacy-root-azm/src/lowering/fixupEmission.js +0 -199
  208. package/dist/legacy-root-azm/src/lowering/immMath.d.ts +0 -2
  209. package/dist/legacy-root-azm/src/lowering/immMath.js +0 -34
  210. package/dist/legacy-root-azm/src/lowering/inputAssets.d.ts +0 -7
  211. package/dist/legacy-root-azm/src/lowering/inputAssets.js +0 -106
  212. package/dist/legacy-root-azm/src/lowering/ldEncoding.d.ts +0 -15
  213. package/dist/legacy-root-azm/src/lowering/ldEncoding.js +0 -12
  214. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.d.ts +0 -5
  215. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.js +0 -124
  216. package/dist/legacy-root-azm/src/lowering/ldFormSelection.d.ts +0 -26
  217. package/dist/legacy-root-azm/src/lowering/ldFormSelection.js +0 -92
  218. package/dist/legacy-root-azm/src/lowering/ldLowering.d.ts +0 -7
  219. package/dist/legacy-root-azm/src/lowering/ldLowering.js +0 -13
  220. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.d.ts +0 -23
  221. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.js +0 -185
  222. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.d.ts +0 -13
  223. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.js +0 -86
  224. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.d.ts +0 -27
  225. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.js +0 -215
  226. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.d.ts +0 -202
  227. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.js +0 -1
  228. package/dist/legacy-root-azm/src/lowering/loweredFormat.d.ts +0 -3
  229. package/dist/legacy-root-azm/src/lowering/loweredFormat.js +0 -26
  230. package/dist/legacy-root-azm/src/lowering/loweredItemSize.d.ts +0 -4
  231. package/dist/legacy-root-azm/src/lowering/loweredItemSize.js +0 -17
  232. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.d.ts +0 -9
  233. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.js +0 -55
  234. package/dist/legacy-root-azm/src/lowering/loweringTypes.d.ts +0 -27
  235. package/dist/legacy-root-azm/src/lowering/loweringTypes.js +0 -1
  236. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.d.ts +0 -9
  237. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.js +0 -9
  238. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.d.ts +0 -15
  239. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.js +0 -45
  240. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.d.ts +0 -15
  241. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.js +0 -88
  242. package/dist/legacy-root-azm/src/lowering/opExpansionStream.d.ts +0 -12
  243. package/dist/legacy-root-azm/src/lowering/opExpansionStream.js +0 -176
  244. package/dist/legacy-root-azm/src/lowering/opMatching.d.ts +0 -52
  245. package/dist/legacy-root-azm/src/lowering/opMatching.js +0 -355
  246. package/dist/legacy-root-azm/src/lowering/opSubstitution.d.ts +0 -13
  247. package/dist/legacy-root-azm/src/lowering/opSubstitution.js +0 -175
  248. package/dist/legacy-root-azm/src/lowering/prescanTypes.d.ts +0 -7
  249. package/dist/legacy-root-azm/src/lowering/prescanTypes.js +0 -1
  250. package/dist/legacy-root-azm/src/lowering/programLowering.d.ts +0 -144
  251. package/dist/legacy-root-azm/src/lowering/programLowering.js +0 -2
  252. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.d.ts +0 -5
  253. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.js +0 -5
  254. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.d.ts +0 -18
  255. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.js +0 -115
  256. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.d.ts +0 -2
  257. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.js +0 -93
  258. package/dist/legacy-root-azm/src/lowering/programPrescan.d.ts +0 -3
  259. package/dist/legacy-root-azm/src/lowering/programPrescan.js +0 -37
  260. package/dist/legacy-root-azm/src/lowering/traceFormat.d.ts +0 -13
  261. package/dist/legacy-root-azm/src/lowering/traceFormat.js +0 -211
  262. package/dist/legacy-root-azm/src/packageInfo.d.ts +0 -1
  263. package/dist/legacy-root-azm/src/packageInfo.js +0 -15
  264. package/dist/legacy-root-azm/src/pathCompare.d.ts +0 -3
  265. package/dist/legacy-root-azm/src/pathCompare.js +0 -26
  266. package/dist/legacy-root-azm/src/pipeline.d.ts +0 -91
  267. package/dist/legacy-root-azm/src/pipeline.js +0 -1
  268. package/dist/legacy-root-azm/src/registerCare/analyze.d.ts +0 -24
  269. package/dist/legacy-root-azm/src/registerCare/analyze.js +0 -327
  270. package/dist/legacy-root-azm/src/registerCare/boundaryHints.d.ts +0 -2
  271. package/dist/legacy-root-azm/src/registerCare/boundaryHints.js +0 -10
  272. package/dist/legacy-root-azm/src/registerCare/carriers.d.ts +0 -4
  273. package/dist/legacy-root-azm/src/registerCare/carriers.js +0 -78
  274. package/dist/legacy-root-azm/src/registerCare/controlFlow.d.ts +0 -5
  275. package/dist/legacy-root-azm/src/registerCare/controlFlow.js +0 -35
  276. package/dist/legacy-root-azm/src/registerCare/fix.d.ts +0 -11
  277. package/dist/legacy-root-azm/src/registerCare/fix.js +0 -119
  278. package/dist/legacy-root-azm/src/registerCare/liveness.d.ts +0 -7
  279. package/dist/legacy-root-azm/src/registerCare/liveness.js +0 -227
  280. package/dist/legacy-root-azm/src/registerCare/profiles.d.ts +0 -11
  281. package/dist/legacy-root-azm/src/registerCare/profiles.js +0 -45
  282. package/dist/legacy-root-azm/src/registerCare/programModel.d.ts +0 -3
  283. package/dist/legacy-root-azm/src/registerCare/programModel.js +0 -181
  284. package/dist/legacy-root-azm/src/registerCare/report.d.ts +0 -5
  285. package/dist/legacy-root-azm/src/registerCare/report.js +0 -139
  286. package/dist/legacy-root-azm/src/registerCare/smartComments.d.ts +0 -5
  287. package/dist/legacy-root-azm/src/registerCare/smartComments.js +0 -247
  288. package/dist/legacy-root-azm/src/registerCare/types.d.ts +0 -154
  289. package/dist/legacy-root-azm/src/registerCare/types.js +0 -1
  290. package/dist/legacy-root-azm/src/semantics/declVisitor.d.ts +0 -5
  291. package/dist/legacy-root-azm/src/semantics/declVisitor.js +0 -11
  292. package/dist/legacy-root-azm/src/semantics/env.d.ts +0 -28
  293. package/dist/legacy-root-azm/src/semantics/env.js +0 -432
  294. package/dist/legacy-root-azm/src/semantics/layout.d.ts +0 -21
  295. package/dist/legacy-root-azm/src/semantics/layout.js +0 -226
  296. package/dist/legacy-root-azm/src/semantics/layoutCastFold.d.ts +0 -22
  297. package/dist/legacy-root-azm/src/semantics/layoutCastFold.js +0 -118
  298. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.d.ts +0 -2
  299. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.js +0 -4
  300. package/dist/legacy-root-azm/src/semantics/typeQueries.d.ts +0 -31
  301. package/dist/legacy-root-azm/src/semantics/typeQueries.js +0 -124
  302. package/dist/legacy-root-azm/src/sourceIncludeExpansion.d.ts +0 -17
  303. package/dist/legacy-root-azm/src/sourceIncludeExpansion.js +0 -124
  304. package/dist/legacy-root-azm/src/sourceIncludePaths.d.ts +0 -1
  305. package/dist/legacy-root-azm/src/sourceIncludePaths.js +0 -12
  306. package/dist/legacy-root-azm/src/sourceLoader.d.ts +0 -15
  307. package/dist/legacy-root-azm/src/sourceLoader.js +0 -118
  308. package/dist/legacy-root-azm/src/z80/effects.d.ts +0 -3
  309. package/dist/legacy-root-azm/src/z80/effects.js +0 -516
  310. package/dist/legacy-root-azm/src/z80/encode.d.ts +0 -10
  311. package/dist/legacy-root-azm/src/z80/encode.js +0 -412
  312. package/dist/legacy-root-azm/src/z80/encodeAlu.d.ts +0 -7
  313. package/dist/legacy-root-azm/src/z80/encodeAlu.js +0 -219
  314. package/dist/legacy-root-azm/src/z80/encodeBitOps.d.ts +0 -7
  315. package/dist/legacy-root-azm/src/z80/encodeBitOps.js +0 -123
  316. package/dist/legacy-root-azm/src/z80/encodeContext.d.ts +0 -29
  317. package/dist/legacy-root-azm/src/z80/encodeContext.js +0 -1
  318. package/dist/legacy-root-azm/src/z80/encodeControl.d.ts +0 -26
  319. package/dist/legacy-root-azm/src/z80/encodeControl.js +0 -180
  320. package/dist/legacy-root-azm/src/z80/encodeCoreOps.d.ts +0 -7
  321. package/dist/legacy-root-azm/src/z80/encodeCoreOps.js +0 -131
  322. package/dist/legacy-root-azm/src/z80/encodeIo.d.ts +0 -9
  323. package/dist/legacy-root-azm/src/z80/encodeIo.js +0 -128
  324. package/dist/legacy-root-azm/src/z80/encodeLd.d.ts +0 -13
  325. package/dist/legacy-root-azm/src/z80/encodeLd.js +0 -273
  326. package/dist/legacy-root-azm/src/z80/encoderRegistry.d.ts +0 -13
  327. package/dist/legacy-root-azm/src/z80/encoderRegistry.js +0 -169
  328. package/dist/src/outputs/write-listing.d.ts +0 -2
  329. package/dist/src/outputs/write-listing.js +0 -79
  330. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.d.ts +0 -0
  331. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.js +0 -0
  332. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.d.ts +0 -0
  333. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.js +0 -0
  334. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.d.ts +0 -0
@@ -1,412 +0,0 @@
1
- import { flattenEaDottedName } from '../lowering/asmUtils.js';
2
- import { diagEncodeAt } from '../lowering/loweringDiagnostics.js';
3
- import { evalImmExpr } from '../semantics/env.js';
4
- import { getEncoderRegistryEntry } from './encoderRegistry.js';
5
- import { encodeAluInstruction } from './encodeAlu.js';
6
- import { encodeBitOpsInstruction } from './encodeBitOps.js';
7
- import { encodeControlInstruction } from './encodeControl.js';
8
- import { encodeCoreOpsInstruction } from './encodeCoreOps.js';
9
- import { encodeIoInstruction } from './encodeIo.js';
10
- import { encodeLdInstruction } from './encodeLd.js';
11
- /** Pass-through to {@link diagEncodeAt} for encoder submodules that take an instruction node. */
12
- function diag(diagnostics, node, message) {
13
- diagEncodeAt(diagnostics, node.span, message);
14
- }
15
- function immValue(op, env) {
16
- if (op.kind === 'Imm')
17
- return evalImmExpr(op.expr, env);
18
- if (op.kind !== 'Ea')
19
- return undefined;
20
- const dotted = flattenEaDottedName(op.expr);
21
- if (!dotted || !env.enums.has(dotted))
22
- return undefined;
23
- return evalImmExpr({ kind: 'ImmName', span: op.span, name: dotted }, env);
24
- }
25
- function portImmValue(op, env) {
26
- if (op.kind !== 'PortImm8')
27
- return undefined;
28
- return evalImmExpr(op.expr, env);
29
- }
30
- function fitsImm8(value) {
31
- return value >= -0x80 && value <= 0xff;
32
- }
33
- function fitsImm16(value) {
34
- return value >= -0x8000 && value <= 0xffff;
35
- }
36
- function regName(op) {
37
- return op.kind === 'Reg' ? op.name.toUpperCase() : undefined;
38
- }
39
- function registerTokenName(op) {
40
- const name = op.kind === 'Reg'
41
- ? op.name.toUpperCase()
42
- : op.kind === 'Imm' && op.expr.kind === 'ImmName'
43
- ? op.expr.name.toUpperCase()
44
- : undefined;
45
- if (!name)
46
- return undefined;
47
- switch (name) {
48
- case 'A':
49
- case 'B':
50
- case 'C':
51
- case 'D':
52
- case 'E':
53
- case 'H':
54
- case 'L':
55
- case 'BC':
56
- case 'DE':
57
- case 'HL':
58
- case 'SP':
59
- case 'AF':
60
- case 'IX':
61
- case 'IY':
62
- case 'IXH':
63
- case 'IXL':
64
- case 'IYH':
65
- case 'IYL':
66
- return name;
67
- default:
68
- return undefined;
69
- }
70
- }
71
- function reg8Code(name) {
72
- switch (name.toUpperCase()) {
73
- case 'B':
74
- return 0;
75
- case 'C':
76
- return 1;
77
- case 'D':
78
- return 2;
79
- case 'E':
80
- return 3;
81
- case 'H':
82
- return 4;
83
- case 'L':
84
- return 5;
85
- case 'A':
86
- return 7;
87
- default:
88
- return undefined;
89
- }
90
- }
91
- function isPlainHLReg8(name) {
92
- return name === 'H' || name === 'L';
93
- }
94
- function indexedReg8(op) {
95
- const n = regName(op);
96
- switch (n) {
97
- case 'IXH':
98
- return { prefix: 0xdd, code: 4, display: 'IXH' };
99
- case 'IXL':
100
- return { prefix: 0xdd, code: 5, display: 'IXL' };
101
- case 'IYH':
102
- return { prefix: 0xfd, code: 4, display: 'IYH' };
103
- case 'IYL':
104
- return { prefix: 0xfd, code: 5, display: 'IYL' };
105
- default:
106
- return undefined;
107
- }
108
- }
109
- function isMemHL(op) {
110
- return op.kind === 'Mem' && op.expr.kind === 'EaName' && op.expr.name.toUpperCase() === 'HL';
111
- }
112
- function isMemRegName(op, reg) {
113
- return op.kind === 'Mem' && op.expr.kind === 'EaName' && op.expr.name.toUpperCase() === reg;
114
- }
115
- function isReg16TransferName(name) {
116
- return (name === 'BC' ||
117
- name === 'DE' ||
118
- name === 'HL' ||
119
- name === 'SP' ||
120
- name === 'AF' ||
121
- name === 'IX' ||
122
- name === 'IY');
123
- }
124
- function memIndexed(op, env, _diagnostics) {
125
- if (op.kind !== 'Mem')
126
- return undefined;
127
- const ea = op.expr;
128
- const encodeBaseDisp = (baseExpr, dispExpr, negate = false) => {
129
- if (baseExpr.kind !== 'EaName')
130
- return undefined;
131
- const base = baseExpr.name.toUpperCase();
132
- if (base !== 'IX' && base !== 'IY')
133
- return undefined;
134
- const rawDisp = evalImmExpr(dispExpr, env);
135
- if (rawDisp === undefined)
136
- return undefined;
137
- const prefix = base === 'IX' ? 0xdd : 0xfd;
138
- return { prefix, disp: negate ? -rawDisp : rawDisp };
139
- };
140
- if (ea.kind === 'EaIndex' && ea.index.kind === 'IndexImm') {
141
- return encodeBaseDisp(ea.base, ea.index.value);
142
- }
143
- if (ea.kind === 'EaName') {
144
- const base = ea.name.toUpperCase();
145
- if (base === 'IX')
146
- return { prefix: 0xdd, disp: 0 };
147
- if (base === 'IY')
148
- return { prefix: 0xfd, disp: 0 };
149
- }
150
- if (ea.kind === 'EaAdd') {
151
- return encodeBaseDisp(ea.base, ea.offset);
152
- }
153
- if (ea.kind === 'EaSub') {
154
- return encodeBaseDisp(ea.base, ea.offset, true);
155
- }
156
- return undefined;
157
- }
158
- function memAbs16(op, env) {
159
- if (op.kind !== 'Mem')
160
- return undefined;
161
- const evalEaAbs16 = (ea) => {
162
- switch (ea.kind) {
163
- case 'EaName':
164
- return evalImmExpr({
165
- kind: 'ImmName',
166
- span: ea.span,
167
- name: ea.name,
168
- }, env);
169
- case 'EaImm':
170
- return evalImmExpr(ea.expr, env);
171
- case 'EaAdd': {
172
- const base = evalEaAbs16(ea.base);
173
- const delta = evalImmExpr(ea.offset, env);
174
- if (base === undefined || delta === undefined)
175
- return undefined;
176
- return base + delta;
177
- }
178
- case 'EaSub': {
179
- const base = evalEaAbs16(ea.base);
180
- const delta = evalImmExpr(ea.offset, env);
181
- if (base === undefined || delta === undefined)
182
- return undefined;
183
- return base - delta;
184
- }
185
- default:
186
- return undefined;
187
- }
188
- };
189
- return evalEaAbs16(op.expr);
190
- }
191
- function conditionName(op) {
192
- if (op.kind === 'Reg')
193
- return op.name.toUpperCase();
194
- if (op.kind === 'Imm' && op.expr.kind === 'ImmName')
195
- return op.expr.name.toUpperCase();
196
- return undefined;
197
- }
198
- function symbolicImmBaseName(op, env) {
199
- if (op.kind !== 'Imm')
200
- return undefined;
201
- const expr = op.expr;
202
- if (expr.kind === 'ImmName')
203
- return expr.name.toUpperCase();
204
- if (expr.kind !== 'ImmBinary')
205
- return undefined;
206
- if (expr.op !== '+' && expr.op !== '-')
207
- return undefined;
208
- const leftName = expr.left.kind === 'ImmName' ? expr.left.name.toUpperCase() : undefined;
209
- const rightName = expr.right.kind === 'ImmName' ? expr.right.name.toUpperCase() : undefined;
210
- if (leftName) {
211
- const right = evalImmExpr(expr.right, env);
212
- if (right !== undefined)
213
- return leftName;
214
- }
215
- if (expr.op === '+' && rightName) {
216
- const left = evalImmExpr(expr.left, env);
217
- if (left !== undefined)
218
- return rightName;
219
- }
220
- return undefined;
221
- }
222
- function jpConditionOpcode(name) {
223
- switch (name) {
224
- case 'NZ':
225
- return 0xc2;
226
- case 'Z':
227
- return 0xca;
228
- case 'NC':
229
- return 0xd2;
230
- case 'C':
231
- return 0xda;
232
- case 'PO':
233
- return 0xe2;
234
- case 'PE':
235
- return 0xea;
236
- case 'P':
237
- return 0xf2;
238
- case 'M':
239
- return 0xfa;
240
- default:
241
- return undefined;
242
- }
243
- }
244
- function jrConditionOpcode(name) {
245
- switch (name) {
246
- case 'NZ':
247
- return 0x20;
248
- case 'Z':
249
- return 0x28;
250
- case 'NC':
251
- return 0x30;
252
- case 'C':
253
- return 0x38;
254
- default:
255
- return undefined;
256
- }
257
- }
258
- function callConditionOpcode(name) {
259
- switch (name) {
260
- case 'NZ':
261
- return 0xc4;
262
- case 'Z':
263
- return 0xcc;
264
- case 'NC':
265
- return 0xd4;
266
- case 'C':
267
- return 0xdc;
268
- case 'PO':
269
- return 0xe4;
270
- case 'PE':
271
- return 0xec;
272
- case 'P':
273
- return 0xf4;
274
- case 'M':
275
- return 0xfc;
276
- default:
277
- return undefined;
278
- }
279
- }
280
- function retConditionOpcode(name) {
281
- switch (name) {
282
- case 'NZ':
283
- return 0xc0;
284
- case 'Z':
285
- return 0xc8;
286
- case 'NC':
287
- return 0xd0;
288
- case 'C':
289
- return 0xd8;
290
- case 'PO':
291
- return 0xe0;
292
- case 'PE':
293
- return 0xe8;
294
- case 'P':
295
- return 0xf0;
296
- case 'M':
297
- return 0xf8;
298
- default:
299
- return undefined;
300
- }
301
- }
302
- function encodeFamilyInstruction(family, node, env, diagnostics) {
303
- switch (family) {
304
- case 'control':
305
- return encodeControlInstruction(node, env, diagnostics, {
306
- diag,
307
- immValue,
308
- registerTokenName,
309
- conditionName,
310
- symbolicImmBaseName,
311
- fitsImm16,
312
- isMemRegName,
313
- retConditionOpcode,
314
- callConditionOpcode,
315
- jpConditionOpcode,
316
- jrConditionOpcode,
317
- });
318
- case 'alu':
319
- return encodeAluInstruction(node, env, diagnostics, {
320
- diag,
321
- regName,
322
- immValue,
323
- indexedReg8,
324
- reg8Code,
325
- fitsImm8,
326
- isMemHL,
327
- memIndexed: (op, env) => memIndexed(op, env, diagnostics),
328
- });
329
- case 'io':
330
- return encodeIoInstruction(node, env, diagnostics, {
331
- diag,
332
- regName,
333
- immValue,
334
- portImmValue,
335
- indexedReg8,
336
- reg8Code,
337
- fitsImm8,
338
- });
339
- case 'ld':
340
- return encodeLdInstruction(node, env, diagnostics, {
341
- diag,
342
- regName,
343
- immValue,
344
- indexedReg8,
345
- reg8Code,
346
- fitsImm8,
347
- fitsImm16,
348
- memAbs16,
349
- memIndexed: (op, env) => memIndexed(op, env, diagnostics),
350
- isMemHL,
351
- isMemRegName,
352
- isReg16TransferName,
353
- isPlainHLReg8,
354
- });
355
- case 'core':
356
- return encodeCoreOpsInstruction(node, env, diagnostics, {
357
- diag,
358
- regName,
359
- indexedReg8,
360
- reg8Code,
361
- isMemHL,
362
- memIndexed: (op, env) => memIndexed(op, env, diagnostics),
363
- });
364
- case 'bit':
365
- return encodeBitOpsInstruction(node, env, diagnostics, {
366
- diag,
367
- regName,
368
- immValue,
369
- indexedReg8,
370
- reg8Code,
371
- isMemHL,
372
- memIndexed: (op, env) => memIndexed(op, env, diagnostics),
373
- });
374
- }
375
- }
376
- /**
377
- * Encode a single `asm` instruction node into Z80 machine-code bytes.
378
- *
379
- * - Immediate operands may be `imm` expressions (const/enum names and operators), evaluated via the env.
380
- * - Unsupported forms append an error diagnostic and return `undefined`.
381
- */
382
- export function encodeInstruction(node, env, diagnostics) {
383
- const diagnosticsBefore = diagnostics.length;
384
- const head = node.head.toLowerCase();
385
- const entry = getEncoderRegistryEntry(head);
386
- if (!entry) {
387
- diagEncodeAt(diagnostics, node.span, `Unsupported instruction: ${node.head}`);
388
- return undefined;
389
- }
390
- if (entry.kind === 'zero') {
391
- if (node.operands.length === 0)
392
- return entry.bytes;
393
- diagEncodeAt(diagnostics, node.span, `${head} expects no operands`);
394
- return undefined;
395
- }
396
- const encoded = encodeFamilyInstruction(entry.family, node, env, diagnostics);
397
- if (encoded)
398
- return encoded;
399
- if (entry.fallback === 'none')
400
- return undefined;
401
- if (diagnostics.length > diagnosticsBefore)
402
- return undefined;
403
- const arityMessage = entry.arityDiagnostic(head, node.operands.length);
404
- if (entry.fallback === 'arity-short-circuit' && arityMessage === undefined)
405
- return undefined;
406
- if (arityMessage !== undefined) {
407
- diagEncodeAt(diagnostics, node.span, arityMessage);
408
- return undefined;
409
- }
410
- diagEncodeAt(diagnostics, node.span, `${head} has unsupported operand form`);
411
- return undefined;
412
- }
@@ -1,7 +0,0 @@
1
- import type { Diagnostic } from '../diagnosticTypes.js';
2
- import type { AsmInstructionNode } from '../frontend/ast.js';
3
- import type { CompileEnv } from '../semantics/env.js';
4
- import type { EncoderImmContext, EncoderMemContext, EncoderRegisterContext } from './encodeContext.js';
5
- type AluEncodeContext = EncoderRegisterContext & EncoderImmContext & EncoderMemContext;
6
- export declare function encodeAluInstruction(node: AsmInstructionNode, env: CompileEnv, diagnostics: Diagnostic[], ctx: AluEncodeContext): Uint8Array | undefined;
7
- export {};
@@ -1,219 +0,0 @@
1
- function encodeAluAOrImm8OrMemHL(node, env, diagnostics, ctx, rBase, immOpcode, memOpcode, mnemonic, allowExplicitA = false) {
2
- const ops = node.operands;
3
- let src;
4
- if (ops.length === 1)
5
- src = ops[0];
6
- else if (ops.length === 2) {
7
- if (allowExplicitA) {
8
- if (ctx.regName(ops[0]) === 'A')
9
- src = ops[1];
10
- else {
11
- ctx.diag(diagnostics, node, `${mnemonic} two-operand form requires destination A`);
12
- return undefined;
13
- }
14
- }
15
- }
16
- if (!src)
17
- return undefined;
18
- const reg = ctx.regName(src);
19
- const indexed = ctx.indexedReg8(src);
20
- if (indexed)
21
- return Uint8Array.of(indexed.prefix, rBase + indexed.code);
22
- if (reg) {
23
- const code = ctx.reg8Code(reg);
24
- if (code === undefined) {
25
- ctx.diag(diagnostics, node, `${mnemonic} expects reg8/imm8/(hl)`);
26
- return undefined;
27
- }
28
- return Uint8Array.of(rBase + code);
29
- }
30
- if (ctx.isMemHL(src))
31
- return Uint8Array.of(memOpcode);
32
- const idx = ctx.memIndexed(src, env);
33
- if (idx) {
34
- const disp = idx.disp;
35
- if (disp < -128 || disp > 127) {
36
- ctx.diag(diagnostics, node, `${mnemonic} (ix/iy+disp) expects disp8`);
37
- return undefined;
38
- }
39
- return Uint8Array.of(idx.prefix, memOpcode, disp & 0xff);
40
- }
41
- const n = ctx.immValue(src, env);
42
- if (n === undefined || !ctx.fitsImm8(n)) {
43
- ctx.diag(diagnostics, node, `${mnemonic} expects imm8`);
44
- return undefined;
45
- }
46
- return Uint8Array.of(immOpcode, n & 0xff);
47
- }
48
- function encodeHlReg16Alu(node, diagnostics, ctx, src, mnemonic, opcodes) {
49
- const opcode = src ? opcodes[src] : undefined;
50
- if (opcode === undefined) {
51
- ctx.diag(diagnostics, node, `${mnemonic} HL, rr expects BC/DE/HL/SP`);
52
- return undefined;
53
- }
54
- return Uint8Array.of(0xed, opcode);
55
- }
56
- export function encodeAluInstruction(node, env, diagnostics, ctx) {
57
- const head = node.head.toLowerCase();
58
- const ops = node.operands;
59
- if (head === 'add' && ops.length === 2) {
60
- const dst = ctx.regName(ops[0]);
61
- const src = ctx.regName(ops[1]);
62
- if (dst === 'A') {
63
- const indexedSrc = ctx.indexedReg8(ops[1]);
64
- if (indexedSrc)
65
- return Uint8Array.of(indexedSrc.prefix, 0x80 + indexedSrc.code);
66
- if (src) {
67
- const s = ctx.reg8Code(src);
68
- if (s !== undefined)
69
- return Uint8Array.of(0x80 + s);
70
- }
71
- if (ctx.isMemHL(ops[1]))
72
- return Uint8Array.of(0x86);
73
- const idx = ctx.memIndexed(ops[1], env);
74
- if (idx) {
75
- const disp = idx.disp;
76
- if (disp < -128 || disp > 127) {
77
- ctx.diag(diagnostics, node, `add A, (ix/iy+disp) expects disp8`);
78
- return undefined;
79
- }
80
- return Uint8Array.of(idx.prefix, 0x86, disp & 0xff);
81
- }
82
- const n = ctx.immValue(ops[1], env);
83
- if (n !== undefined) {
84
- if (!ctx.fitsImm8(n)) {
85
- ctx.diag(diagnostics, node, `add A, n expects imm8`);
86
- return undefined;
87
- }
88
- return Uint8Array.of(0xc6, n & 0xff);
89
- }
90
- ctx.diag(diagnostics, node, `add A, src expects reg8/imm8/(hl)/(ix/iy+disp)`);
91
- return undefined;
92
- }
93
- if (dst === 'HL' && src) {
94
- switch (src) {
95
- case 'BC':
96
- return Uint8Array.of(0x09);
97
- case 'DE':
98
- return Uint8Array.of(0x19);
99
- case 'HL':
100
- return Uint8Array.of(0x29);
101
- case 'SP':
102
- return Uint8Array.of(0x39);
103
- }
104
- ctx.diag(diagnostics, node, `add HL, rr expects BC/DE/HL/SP`);
105
- return undefined;
106
- }
107
- if (dst === 'HL') {
108
- ctx.diag(diagnostics, node, `add HL, rr expects BC/DE/HL/SP`);
109
- return undefined;
110
- }
111
- if ((dst === 'IX' || dst === 'IY') && src) {
112
- const prefix = dst === 'IX' ? 0xdd : 0xfd;
113
- switch (src) {
114
- case 'BC':
115
- return Uint8Array.of(prefix, 0x09);
116
- case 'DE':
117
- return Uint8Array.of(prefix, 0x19);
118
- case 'SP':
119
- return Uint8Array.of(prefix, 0x39);
120
- case 'IX':
121
- if (dst === 'IX')
122
- return Uint8Array.of(0xdd, 0x29);
123
- break;
124
- case 'IY':
125
- if (dst === 'IY')
126
- return Uint8Array.of(0xfd, 0x29);
127
- break;
128
- }
129
- ctx.diag(diagnostics, node, `add ${dst}, rr supports BC/DE/SP and same-index pair only`);
130
- return undefined;
131
- }
132
- if (dst === 'IX' || dst === 'IY') {
133
- ctx.diag(diagnostics, node, `add ${dst}, rr supports BC/DE/SP and same-index pair only`);
134
- return undefined;
135
- }
136
- ctx.diag(diagnostics, node, `add expects destination A, HL, IX, or IY`);
137
- return undefined;
138
- }
139
- if (head === 'sub') {
140
- const encoded = encodeAluAOrImm8OrMemHL(node, env, diagnostics, ctx, 0x90, 0xd6, 0x96, 'sub', true);
141
- if (encoded)
142
- return encoded;
143
- if (ops.length === 1 || ops.length === 2)
144
- return undefined;
145
- }
146
- if (head === 'cp') {
147
- const encoded = encodeAluAOrImm8OrMemHL(node, env, diagnostics, ctx, 0xb8, 0xfe, 0xbe, 'cp', true);
148
- if (encoded)
149
- return encoded;
150
- if (ops.length === 1 || ops.length === 2)
151
- return undefined;
152
- }
153
- if (head === 'and') {
154
- const encoded = encodeAluAOrImm8OrMemHL(node, env, diagnostics, ctx, 0xa0, 0xe6, 0xa6, 'and', true);
155
- if (encoded)
156
- return encoded;
157
- if (ops.length === 1 || ops.length === 2)
158
- return undefined;
159
- }
160
- if (head === 'or') {
161
- const encoded = encodeAluAOrImm8OrMemHL(node, env, diagnostics, ctx, 0xb0, 0xf6, 0xb6, 'or', true);
162
- if (encoded)
163
- return encoded;
164
- if (ops.length === 1 || ops.length === 2)
165
- return undefined;
166
- }
167
- if (head === 'xor') {
168
- const encoded = encodeAluAOrImm8OrMemHL(node, env, diagnostics, ctx, 0xa8, 0xee, 0xae, 'xor', true);
169
- if (encoded)
170
- return encoded;
171
- if (ops.length === 1 || ops.length === 2)
172
- return undefined;
173
- }
174
- if (head === 'adc') {
175
- if (ops.length === 2) {
176
- const dst = ctx.regName(ops[0]);
177
- if (dst === 'HL') {
178
- return encodeHlReg16Alu(node, diagnostics, ctx, ctx.regName(ops[1]), 'adc', {
179
- BC: 0x4a,
180
- DE: 0x5a,
181
- HL: 0x6a,
182
- SP: 0x7a,
183
- });
184
- }
185
- if (dst !== 'A') {
186
- ctx.diag(diagnostics, node, `adc expects destination A or HL`);
187
- return undefined;
188
- }
189
- }
190
- const encoded = encodeAluAOrImm8OrMemHL(node, env, diagnostics, ctx, 0x88, 0xce, 0x8e, 'adc', true);
191
- if (encoded)
192
- return encoded;
193
- if (ops.length === 1 || ops.length === 2)
194
- return undefined;
195
- }
196
- if (head === 'sbc') {
197
- if (ops.length === 2) {
198
- const dst = ctx.regName(ops[0]);
199
- if (dst === 'HL') {
200
- return encodeHlReg16Alu(node, diagnostics, ctx, ctx.regName(ops[1]), 'sbc', {
201
- BC: 0x42,
202
- DE: 0x52,
203
- HL: 0x62,
204
- SP: 0x72,
205
- });
206
- }
207
- if (dst !== 'A') {
208
- ctx.diag(diagnostics, node, `sbc expects destination A or HL`);
209
- return undefined;
210
- }
211
- }
212
- const encoded = encodeAluAOrImm8OrMemHL(node, env, diagnostics, ctx, 0x98, 0xde, 0x9e, 'sbc', true);
213
- if (encoded)
214
- return encoded;
215
- if (ops.length === 1 || ops.length === 2)
216
- return undefined;
217
- }
218
- return undefined;
219
- }
@@ -1,7 +0,0 @@
1
- import type { Diagnostic } from '../diagnosticTypes.js';
2
- import type { AsmInstructionNode } from '../frontend/ast.js';
3
- import type { CompileEnv } from '../semantics/env.js';
4
- import type { EncoderImmContext, EncoderMemContext, EncoderRegisterContext } from './encodeContext.js';
5
- type BitOpsEncodeContext = EncoderRegisterContext & Pick<EncoderImmContext, 'immValue'> & EncoderMemContext;
6
- export declare function encodeBitOpsInstruction(node: AsmInstructionNode, env: CompileEnv, diagnostics: Diagnostic[], ctx: BitOpsEncodeContext): Uint8Array | undefined;
7
- export {};