From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751871AbbJBWMM (ORCPT ); Fri, 2 Oct 2015 18:12:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53346 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750789AbbJBWML (ORCPT ); Fri, 2 Oct 2015 18:12:11 -0400 Subject: Re: Missing operand for tlbie instruction on Power7 To: Segher Boessenkool , Denis Kirjanov References: <560EA623.1040300@redhat.com> <1443816930.13186.214.camel@otta> <20151002220051.GA26712@gate.crashing.org> Cc: Peter Bergner , "linuxppc-dev@lists.ozlabs.org" , Paul Mackerras , Linux Kernel Mailing List From: Laura Abbott Message-ID: <560F0138.8050802@redhat.com> Date: Fri, 2 Oct 2015 15:12:08 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <20151002220051.GA26712@gate.crashing.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/02/2015 03:00 PM, Segher Boessenkool wrote: > On Sat, Oct 03, 2015 at 12:37:35AM +0300, Denis Kirjanov wrote: >>>> -0: tlbie r4; \ >>>> +0: tlbie r4, 0; \ >>> >>> This isn't correct. With POWER7 and later (which this compile >>> is, since it's on LE), the tlbie instruction takes two register >>> operands: >>> >>> tlbie RB, RS >>> >>> The tlbie instruction on pre POWER7 cpus had one required register >>> operand (RB) and an optional second L operand, where if you omitted >>> it, it was the same as using "0": >>> >>> tlbie RB, L >>> >>> This is a POWER7 and later build, so your change which adds the "0" >>> above is really adding r0 for RS. The new tlbie instruction doesn't >>> treat r0 specially, so you'll be using whatever random bits which >>> happen to be in r0 which I don't think that is what you want. >> >> Ok, than we can just zero out r5 for example and use it in tlbie as RS, >> right? > > That won't assemble _unless_ your assembler is in POWER7 mode. It also > won't do the right thing at run time on older machines. > > Where is this tlbia macro used at all, for 64-bit machines? > [labbott@labbott-redhat-machine linux_upstream]$ make ARCH=powerpc CROSS_COMPILE=powerpc64-linux-gnu- CHK include/config/kernel.release CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h CHK include/generated/bounds.h CHK include/generated/timeconst.h CHK include/generated/asm-offsets.h CALL scripts/checksyscalls.sh CHK include/generated/compile.h CALL arch/powerpc/kernel/systbl_chk.sh AS arch/powerpc/kernel/swsusp_asm64.o arch/powerpc/kernel/swsusp_asm64.S: Assembler messages: arch/powerpc/kernel/swsusp_asm64.S:188: Error: missing operand scripts/Makefile.build:294: recipe for target 'arch/powerpc/kernel/swsusp_asm64.o' failed make[1]: *** [arch/powerpc/kernel/swsusp_asm64.o] Error 1 Makefile:941: recipe for target 'arch/powerpc/kernel' failed make: *** [arch/powerpc/kernel] Error 2 This is piece of code protected by CONFIG_PPC_BOOK3S_64. > > Segher >