(
macro: parser.Macro, instructions: dict[str, Instruction], uops: dict[str, Uop]
)
| 1129 | |
| 1130 | |
| 1131 | def add_macro( |
| 1132 | macro: parser.Macro, instructions: dict[str, Instruction], uops: dict[str, Uop] |
| 1133 | ) -> None: |
| 1134 | parts: list[Part] = [] |
| 1135 | first = True |
| 1136 | for part in macro.uops: |
| 1137 | match part: |
| 1138 | case parser.OpName(): |
| 1139 | if part.name == "flush": |
| 1140 | parts.append(Flush()) |
| 1141 | else: |
| 1142 | if part.name not in uops: |
| 1143 | raise analysis_error( |
| 1144 | f"No Uop named {part.name}", macro.tokens[0] |
| 1145 | ) |
| 1146 | uop = uops[part.name] |
| 1147 | if uop.properties.records_value and not first: |
| 1148 | raise analysis_error( |
| 1149 | f"Recording uop {part.name} must be first in macro", |
| 1150 | macro.tokens[0]) |
| 1151 | parts.append(uop) |
| 1152 | first = False |
| 1153 | case parser.CacheEffect(): |
| 1154 | parts.append(Skip(part.size)) |
| 1155 | case _: |
| 1156 | assert False |
| 1157 | assert parts |
| 1158 | add_instruction(macro.first_token, macro.name, parts, instructions) |
| 1159 | |
| 1160 | |
| 1161 | def add_family( |
no test coverage detected
searching dependent graphs…