Skip to content

Commit 645e24b

Browse files
tex3dGreg Roth
authored andcommitted
REVISED: Add extended and vector overload support for DXIL
This is just the diffs for the new version that was meant to fix the warnings
1 parent 4e94388 commit 645e24b

2 files changed

Lines changed: 12 additions & 21 deletions

File tree

utils/hct/hctdb.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ def __init__(self, name, **kwargs):
107107
self.ops = [] # the operands that this instruction takes
108108
self.is_allowed = True # whether this instruction is allowed in a DXIL program
109109
self.oload_types = "" # overload types if applicable
110+
# Always call process_oload_types() after setting oload_types.
110111
self.extended_oload_types = None # extended overload types if applicable
111112
self.vector_oload_types = None # vector overload types if applicable
112113
self.fn_attr = "" # attribute shorthands: rn=does not access memory,ro=only reads from memory,
@@ -140,8 +141,15 @@ def process_oload_types(self):
140141
raise ValueError(
141142
f"overload for '{self.name}' should be a string - use empty if n/a"
142143
)
143-
# Early out for LLVM instructions or void overloads.
144-
if self.oload_types == "v" or not self.is_dxil_op:
144+
# Early out for LLVM instructions
145+
if not self.is_dxil_op:
146+
return
147+
148+
self.extended_oload_types = [""] * dxil_max_overload_dims
149+
self.vector_oload_types = [""] * dxil_max_overload_dims
150+
151+
# Early out for void overloads.
152+
if self.oload_types == "v":
145153
return
146154

147155
if self.oload_types == "":
@@ -186,7 +194,6 @@ def process_oload_types(self):
186194
"Too many overload dimensions for DXIL op "
187195
f"{self.name}: '{self.oload_types}'"
188196
)
189-
self.vector_oload_types = [""] * len(oload_types)
190197
for n, oloads in enumerate(oload_types):
191198
if len(oloads) == 0:
192199
raise ValueError(
@@ -225,11 +232,6 @@ def process_oload_types(self):
225232
self.vector_oload_types[n] = vector_oloads
226233
if len(oload_types) > 1:
227234
self.oload_types = "x"
228-
self.extended_oload_types = oload_types
229-
self.check_extended_oload_ops()
230-
else:
231-
self.oload_types = oload_types[0]
232-
self.extended_oload_types = None
233235

234236
def check_extended_oload_ops(self):
235237
"Ensure ops has sequential extended overload references with $x0, $x1, etc."

utils/hct/hctdb_instrhelp.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -546,25 +546,14 @@ def print_opfunc_props(self):
546546
oload_to_mask = lambda oload: sum(
547547
[1 << dxil_all_user_oload_chars.find(c) for c in oload]
548548
)
549-
maybe_oloads_fn = lambda oloads: oloads if oloads else []
550549
ext_oload_fn = (
551550
lambda i: "{"
552-
+ ",".join(
553-
[
554-
"0x%02x" % oload_to_mask(o)
555-
for o in maybe_oloads_fn(i.extended_oload_types)
556-
]
557-
)
551+
+ ",".join(["0x%x" % oload_to_mask(o) for o in i.extended_oload_types])
558552
+ "}"
559553
)
560554
vec_oload_fn = (
561555
lambda i: "{"
562-
+ ",".join(
563-
[
564-
"0x%02x" % oload_to_mask(o)
565-
for o in maybe_oloads_fn(i.vector_oload_types)
566-
]
567-
)
556+
+ ",".join(["0x%x" % oload_to_mask(o) for o in i.vector_oload_types])
568557
+ "}"
569558
)
570559
for i in self.instrs:

0 commit comments

Comments
 (0)