Nigel Stephens wrote: > > > Franck Bui-Huu wrote: >> Thiemo Seufer wrote: >> >>> Could you check what "-march=mips32r2 -smartmips -mtune=4ksd" does? >>> I expect it to have the same result than "-march=4ksd". >>> >>> >> >> OK, I give it a try and here are some figures: >> >> $ mipsel-linux-size mipssde-6.05.00-20061023/vmlinux~* >> text data bss dec hex filename >> 1446130 58456 93056 1597642 1860ca >> mipssde-6.05.00-20061023/vmlinux~4ksd >> 1472034 58456 93056 1623546 18c5fa >> mipssde-6.05.00-20061023/vmlinux~mips32r2-smartmips >> 1446130 58456 93056 1597642 1860ca >> mipssde-6.05.00-20061023/vmlinux~mips32r2-smartmips-mtune4ksd >> >> So you're right "-march=mips32r2 -smartmips -mtune=4ksd" gives the >> same result as "-march=4ksd" >> >> > > IIRC that should be -msmartmips, not -smartmips. yes '-msmartmips' is used. > >> And the extra space given by "-march=mips32r2 -smartmips" is coming >> from some additional nop instructions: >> >> $ mipsel-linux-objdump -D vmlinux~mips32r2-smartmips > >> vmlinux~mips32r2-smartmips.S >> $ mipsel-linux-objdump -D vmlinux~4ksd > vmlinux~4ksd.S >> $ grep -c nop *.S >> vmlinux~4ksd.S:18708 >> vmlinux~mips32r2-smartmips.S:27895 >> >> It seems that these extra nops are used for load delays. For example: >> >> vmlinux~4ksd.S: >> -------------- >> <snip> >> c00008b4: 8fa40040 lw a0,64(sp) >> c00008b8: 27a40018 addiu a0,sp,24 >> c00008bc: 0c000148 jal c0000520 <try_name> >> <snip> >> >> vmlinux~mips32r2-smartmips.S: >> --------------------------- >> c00008b8: 8fa40040 lw a0,64(sp) >> c00008bc: 00000000 nop >> c00008c0: 27a40018 addiu a0,sp,24 >> c00008c4: 0c000148 jal c0000520 <try_name> >> >> > > That's weird: load delay slots should only be required by -march=mips1 > (or no -march) > > Are you sure that the -march=mips32r2 option is really getting passed to > the compiler and assembler? > Yes I'm pretty sure: $ mispel-linux-readelf -h vmlinux~mips32r2-smartmips File: vmlinux~mips32r2-smartmips ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: MIPS R3000 Version: 0x1 Entry point address: 0xc015e000 Start of program headers: 52 (bytes into file) Start of section headers: 12097028 (bytes into file) Flags: 0x70001001, noreorder, o32, mips32r2 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 1 Size of section headers: 40 (bytes) Number of section headers: 42 Section header string table index: 39 $ head kernel/.user.o.cmd cmd_kernel/user.o := mipsel-linux-gcc -Wp,-MD,kernel/.user.o.d -nostdinc -isystem /usr/lib/gcc/mipsel-linux/3.4.4/include -D__KERNEL__ -Iinclude -include include/linux/autoconf.h -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -O2 -mabi=32 -G 0 -mno-abicalls -fno-pic -pipe -msoft-float -ffreestanding -march=mips32r2 -Wa,-mips32r2 -Wa,--trap -msmartmips -Iinclude/asm-mips/mach-usip -Iinclude/asm-mips/mach-generic -D"VMLINUX_LOAD_ADDRESS=0xffffffffc0000000" -fomit-frame-pointer -g -Wdeclaration-after-statement -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(user)" -D"KBUILD_MODNAME=KBUILD_STR(user)" -c -o kernel/user.o kernel/user.c deps_kernel/user.o := \ kernel/user.c \ $(wildcard include/config/keys.h) \ $(wildcard include/config/inotify/user.h) \ include/linux/init.h \ $(wildcard include/config/modules.h) \ $(wildcard include/config/hotplug.h) \ $(wildcard include/config/hotplug/cpu.h) \ Franck