Date: Sat, 22 Oct 2011 03:26:02 +0530 From: Rohit J <mipsjunkie@gmail.com> To: Juli Mallett <jmallett@freebsd.org> Cc: freebsd-mips <freebsd-mips@freebsd.org> Subject: Re: Assembler complains about use of $at after ".set noat" on sd instr Message-ID: <CAPJ9Q0W4MggQ-BumAkNRXpR618JZPESyUWbLw8porD-J0ayeXQ@mail.gmail.com> In-Reply-To: <CACVs6=8F=QfEKtr5%2BsNrC3cn%2BK6fA%2BOKsHEu7fixLqsO3dUnuA@mail.gmail.com> References: <CAPJ9Q0U%2BJ9U46XuAAi0p7X0wkDazRRN5aUKgpFYU7bPCEj_H5A@mail.gmail.com> <CACVs6=8F=QfEKtr5%2BsNrC3cn%2BK6fA%2BOKsHEu7fixLqsO3dUnuA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
>> 2. Why does it complain about ld instr so far up in the file away f= rom >> the place new code was inserted? Hi Juli, thanks for taking time to respond and so quickly and nicely. the "ld" error happened because I fat fingered the operand in vi! ;-p (yes i need to smack myself on the head!!) >> octeon_asm.S:440: Error: illegal operands `ld T3,8($7)' which should have referenced the "t3" register (in small case) >> octeon_asm.S:440: Error: illegal operands `ld t3,8($7)' the big picture story is that as a partial fix to using octeon specific very large mult instructions in our freebsd kernel (for crypto related ops), we had initially disabled interrupts=3D>context switches during these large mult ops as the code wasnt saving the mult related registers/info and if it were to context switch in the middle of these multiplication rout= ines, bad things happened. Need to see if there is a better way to do it. am now trying to see if it makes sense to save those registers and remove the disable interrupt constraint for running these large multiplicat= ion instructions. will be adapting the (multiplication context save/restore) in the octeon HRM and will revert if i have any further questions. thanks a ton rohit ps:got all excited to see that some of the files I am working on now have you as the original author/contributor! On Fri, Oct 21, 2011 at 12:43 PM, Juli Mallett <jmallett@freebsd.org> wrote= : > On Thu, Oct 20, 2011 at 23:38, Rohit J <mipsjunkie@gmail.com> wrote: >> Hi FreeBSD MIPS Gurus, >> >> Am just starting on MIPS assembly in FreeBSD. >> >> The code that I have was building just fine. >> Then I added an line to a .S file @line# 513 >> >> =A0 =A0 sd =A0k0, mpl(sp) >> >> which on make gives an error that says : >> >> =A0Assembler messages: >> octeon_asm.S:440: Error: illegal operands `ld T3,8($7)' >> octeon_asm.S:513: Error: Macro used $at after ".set noat" >> >> The .S file has a noat directive >> =A0.set noat >> >> Silly Questions >> 1. =A0 =A0 =A0Why does sd instruction (store double word) end up using a= t ? >> I checked the particular manual (Cavium Octeon H/w reference Manual) >> and didn=92t find anything about sd instr using register at. > > Probably you are using a symbol/macro that is not locally defined, and > so assembler assumes it's an external data reference, and tries to > turn sd into a series of instructions using the assembler temporary to > load a linker-resolved address into a register to be used in the sd > instruction. =A0Try running just the C preprocessor and looking at the > resulting assembly to see what's not being resolved properly. > >> 2. =A0 =A0 =A0Why does it complain about ld instr so far up in the file = away from >> the place >> new code was inserted? > > Can you send the source inline? =A0I suspect you're missing an include > or something. =A0Did you change that line? =A0Are you compiling it as it'= s > built on stock FreeBSD, or are you, say, copying the file from the > kernel and then trying to build it in userland? >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPJ9Q0W4MggQ-BumAkNRXpR618JZPESyUWbLw8porD-J0ayeXQ>