Skip to content

Commit

Permalink
GH-115869: Don't JIT zeroed bytes (GH-130023)
Browse files Browse the repository at this point in the history
  • Loading branch information
brandtbucher authored Feb 13, 2025
1 parent 07f5e33 commit 05e89c3
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions Tools/jit/_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 05e89c3

Please sign in to comment.