SH-2 GNU as bug/feature, and a question

GO TO ADMIN PANEL > ADD-ONS AND INSTALL VERTIFORO SIDEBAR TO SEE FORUMS AND SIDEBAR

ExCyber

Staff member
Joined
Aug 8, 2001
Messages
4,014
Points
36
Age
37
After having written some SH-2 code, I tried to assemble it with GNU as (specifically, sh-coff-as and sh-elf-as). It gave me the error message

Error: misaligned offset

on many lines. As it turns out, these were all instructions that use indirect register addressing with displacement, such as

mov.l @(3, r15), r1

The problem lies in the interpretation of the displacement value. According to the SH1/2 programming manual I have, the format of the instruction is (hope this comes out right)

MOV.L @(disp,Rm),Rn 0101nnnnmmmmdddd (disp x 4 + Rm) -> Rn

however, gas implements this as

MOV.L @(disp,Rm),Rn 0101nnnnmmmmdddd (disp + Rm) -> Rn

So in order to get my code to assemble, I had to multiply all the displacements by four; my suspicions were confirmed when gas managed to stick a 20 into four bits without complaining (though I later verified that it was correct with a hex editor :)).

Playing with disassemblers to see what the prevailing opinion was didn't help either: sh2d disassembled these to the gas syntax (for compatibility with gas maybe?), while shdis disassembled them to the syntax described in the manual. Is this a bug in gas, or a gas "feature"? Do I just have to put up with doing it the "wrong" way, or is there a good freeware SuperH assembler out there that uses the syntax described in the manual?
 

ExCyber

Staff member
Joined
Aug 8, 2001
Messages
4,014
Points
36
Age
37
I'd prefer to not do that if I can help it. The assembler would have to be at the very least real (i.e. not crippled) shareware; if I ever release this code, I'd like for people to be able to assemble it without having to "find" a particular commercial assembler. Right now, that means dealing with gas's weirdness I guess... I suppose I should ask about it on the gas ML , maybe there's a few features I don't know about :).
 

RadSil

New Member
Joined
Apr 17, 2001
Messages
317
Points
16
Age
34
Website
www.siloromano.com
Just out of curiousity, what are you coding in asm?

As for assemblers for SuperH? Unfortunately the only 2 I know of are gas and snasm. I always believed that gas is extraordinarily crappy, seeing how it likes to use weird-ass mangled (IMO) syntax... why can't they go with Hitachi's spec? It's probably a holdover from the differences of AT&T and Intel x86 asm. (#### that Unix-born crap!) Just a thought.

Of course, snasm has that problem of being commercial, and I think it only does coff format objects anyway....

I'll look around for you and if I find anything good I'll let you know.
 

ExCyber

Staff member
Joined
Aug 8, 2001
Messages
4,014
Points
36
Age
37
I think it's more likely that its strange syntax is due to weirdness in GCC's code generation; the primary purpose of gas is to assemble the output of gcc, so it wouldn't suprise me if they tweaked the syntax a bit to make it faster or easier to generate somehow. Did I mention that the register names are case-sensitive, and that gas requires them to be lowercase (all references to them in the manual are uppercase IIRC)? Strange beast :p... maybe I could borrow some code from cpp or something and write my own, though that might be a bit of a hassle.
 
Top