-
Notifications
You must be signed in to change notification settings - Fork 737
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Z: Don't pass sreg to ETND #19495
Z: Don't pass sreg to ETND #19495
Conversation
ETND does not take a source register. Signed-off-by: Spencer Comin <[email protected]>
@r30shah FYI |
Passing internal jenkins builds: https://hyc-runtimes-jenkins.swg-devops.com/view/OpenJ9%20-%20Personal/job/Pipeline-Build-Test-Personal/22086/ |
Thanks @Spencer-Comin . |
Jenkins line endings check |
Jenkins test sanity zlinux jdk21 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@r30shah It does seem to be same issue, [1] Register context
[2] Failing instruction
|
ETND
does not take a source register.While investigating #14054 I ran into a SIGILL failure. The illegal instruction was encoded as B2EC0011. From the jitdump, this corresponds to
ETND GPR1,GPR1
.ETND
only operates on one register encoded in bits 24-27 of the instruction, and bits 28-31 should be left 0 [1].ETND
is encoded byTR::S390RRInstruction::generateBinaryEncoding()
, where the second register operand, when it exists, is encoded into bits 28-31 [2], leading to an incorrectly encodedETND
. By not unnecessarily passingcodeReg
as a source register when theETND
is generated, we avoid the incorrect encoding.[1] https://hurgsa.ibm.com:7191/projects/h/hlasmhursley/public/SA22-7832-13/0705103.htm
[2] https://github.com/eclipse/omr/blob/b9a6cccd97d6da637eab6f360be8dc4f9bd194ad/compiler/z/codegen/S390Instruction.cpp#L1348-L1352