GH-115869: Don't JIT zeroed bytes (GH-130023)

This commit is contained in:
Brandt Bucher 2025-02-13 10:51:03 -08:00 committed by GitHub
parent 07f5e33f2e
commit 05e89c34bd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -49,15 +49,16 @@ def _dump_stencil(opname: str, group: _stencils.StencilGroup) -> typing.Iterator
for part, stencil in [("code", group.code), ("data", group.data)]:
for line in stencil.disassembly:
yield f" // {line}"
if stencil.body:
stripped = stencil.body.rstrip(b"\x00")
if stripped:
yield f" const unsigned char {part}_body[{len(stencil.body)}] = {{"
for i in range(0, len(stencil.body), 8):
row = " ".join(f"{byte:#04x}," for byte in stencil.body[i : i + 8])
for i in range(0, len(stripped), 8):
row = " ".join(f"{byte:#04x}," for byte in stripped[i : i + 8])
yield f" {row}"
yield " };"
# Data is written first (so relaxations in the code work properly):
for part, stencil in [("data", group.data), ("code", group.code)]:
if stencil.body:
if stencil.body.rstrip(b"\x00"):
yield f" memcpy({part}, {part}_body, sizeof({part}_body));"
skip = False
stencil.holes.sort(key=lambda hole: hole.offset)