龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 1777|回复: 2

(求助)ls1c浮点寄存器加载遇到一个奇怪的小问题

[复制链接]
发表于 2016-6-12 12:38:51 | 显示全部楼层 |阅读模式
本帖最后由 zt52952 于 2016-6-12 12:41 编辑

问题简单描述:
通过lwc1加载一个双精度浮点数0.5,然后自己相减放到另个一个寄存器中,则会发生异常。
如果把浮点数换成0.8,就不会异常(如附件fpu_test2.s)
如果使用ldc1加载双精度浮点数0.5,也不会发生异常(如附件ftpu_test3.s)


#define v0      $2
#define ra      $31
#define STATUS $12
#define F24     $f24
#define F26     $f26
#define F27     $f27

        .data
        .align 3
dot5:
        .double 0.5


        .text
        .set noreorder
        .align 3

        .global start
start:
        // Enable CP1(FPU)
        li      v0, 0x30000000
        mtc0    v0, STATUS
        nop

        la      v0, dot5
        lwc1    F27, 0(v0)  
        lwc1    F26, 4(v0)

        SUB.D   F24, F26, F26           // 会产生异常

        jr      ra
        nop

/*  编译方法
mips-sde-elf-gcc -x assembler-with-cpp -c -march=mips32 -EL -G0 -mno-abicalls -fno-pic -O0 -nostdinc -fno-builtin -o fpu_test.o fpu_test.s
mips-sde-elf-objcopy -R .MIPS.abiflags fpu_test.o
mips-sde-elf-ld -EL -nostdlib -o fpu_test -e start -Ttext=0x80100000 fpu_test.o
*/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册新用户(newuser)

x
发表于 2016-6-12 13:21:24 | 显示全部楼层
双精度浮点数据用 ldc1 指令加载。
 楼主| 发表于 2016-6-12 13:42:50 | 显示全部楼层
本帖最后由 zt52952 于 2016-6-12 22:39 编辑

原因找到了,是大小端的问题,指令是plan9生成的,修改编译器,生成下面代码就可以了。
        lwc1    F27, 4(v0)
        lwc1    F26, 0(v0)  


本版积分规则

小黑屋|手机版|Archiver|Lemote Inc.  

GMT+8, 2019-3-23 10:08 , Processed in 0.182566 second(s), 18 queries .

快速回复 返回顶部 返回列表