blob: 28b9dc5d08e0795804373fa17874ef84ea406e23 [file] [log] [blame]
From a74562d710c07c1dd2e510fd2c9c259f1f72e4ce Mon Sep 17 00:00:00 2001
From: Joel Stanley <joel.stanley@au1.ibm.com>
Date: Tue, 27 Jun 2017 18:00:09 +0930
Subject: [PATCH] kernel: Update assembly for modern binutils
From Linux 80f23935cadb ("powerpc: Convert cmp to cmpd in idle enter sequence"):
PowerPC's "cmp" instruction has four operands. Normally people write
"cmpw" or "cmpd" for the second cmp operand 0 or 1. But, frequently
people forget, and write "cmp" with just three operands.
With older binutils this is silently accepted as if this was "cmpw",
while often "cmpd" is wanted. With newer binutils GAS will complain
about this for 64-bit code. For 32-bit code it still silently assumes
"cmpw" is what is meant.
The first two instances are dealing with SPRs, which are 32-bit, so cmpw is correct.
It is not clear what to do in the third use of cmp, but given old toolchains
have generated cmpw lets assume that we should maintain the behaviour.
Change-Id: Iee5dd5903dcd7ac4028bab0176e08ce3db23b2d5
Signed-off-by: Joel Stanley <joel.stanley@au1.ibm.com>
---
src/kernel/shutdown.S | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/kernel/shutdown.S b/src/kernel/shutdown.S
index b3c47725ae79..0c42a19cfbfe 100644
--- a/src/kernel/shutdown.S
+++ b/src/kernel/shutdown.S
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2012,2016
+# Contributors Listed Below - COPYRIGHT 2012,2017
# [+] International Business Machines Corp.
#
#
@@ -94,7 +94,7 @@ kernel_shutdown_ea0_1_mode:
;// as it was the one that updated the cpu_count & lowest_pir
;// barrier - 1 wait for all nodes to report
mfspr r10, PIR
- cmp cr0, r10, r7
+ cmpw cr0, r10, r7
bne+ 2f ;// inside KERNEL_BARRIER below
;// Perform barrier - 1
@@ -132,7 +132,7 @@ kernel_shutdown_ea0_1_mode:
addi r8, r8, 8
;// Check for PIR == r7.
mfspr r10, PIR
- cmp cr0, r10, r7
+ cmpw cr0, r10, r7
beq 3f
;// Increment thread count.
1:
@@ -165,7 +165,7 @@ kernel_shutdown_ea0_1_mode:
1:
or 1,1,1
ld r11, 0(r8)
- cmp cr0, r3, r11
+ cmpw cr0, r3, r11
bne+ 1b
isync
;// All other threads have left, so wait a little bit...
--
2.13.1