|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我采用的MIPS核没有协处理器 处理浮点数运算的时候非常的慢 我在用软件解码滤波缩放一张2000*1500JPEG图片的时候用的时间居然要30秒 我统计出大部分的时间(20秒)是用在几行代码上 希望能有很熟悉MIPS汇编的大牛 能帮忙优化一下或者给一些启示 我把代码贴出来:
//
程序说明如下:
start_y 和 tempstart_y 和i 是UINT型(unsigned int)
NewPositionY 和testProportionHeight和PositionYxiaoshu是float型
也就是下面五行代码 由于调用的次数相当多 而我们的MIPS芯片没有协处理器 所以在下面的汇编代码中会有调用自带的浮点数运算汇编子程序去运算 这五行执行效率相当低 很占用时间 不能不加以优化
start_y = tempstart_y + i;
NewPositionY = (float)start_y*(float)testProportionHeight;
PositionYxiaoshu = NewPositionY - (UINT)NewPositionY;
NewPositionY = ( 2*PositionYxiaoshu>1 )?( NewPositionY + 1 ) : ( NewPositionY );
NewPositionY = (UINT)NewPositionY;
//下面是在调试状态下 五行代码和它们的汇编语言
start_y = tempstart_y + i;
0x80083148 storeBlock+0x114: 8fa100cc lw r1, 0xcc(sp)
0x8008314c storeBlock+0x118: 8fac0030 lw r12, 0x30(sp)
0x80083150 storeBlock+0x11c: 0c02b260 jal __utof (0x800ac980)
0x80083154 storeBlock+0x120: 002c2021 addu r4, r1, r12
NewPositionY = (float)start_y*(float)testProportionHeight;
0x80083158 storeBlock+0x124: 00402025 or r4, r2, zero
0x8008315c storeBlock+0x128: 0c02b63f jal __fmul (0x800ad8fc)
0x80083160 storeBlock+0x12c: 8fa500f4 lw r5, 0xf4(sp)
0x80083164 storeBlock+0x130: 0040f025 or r30, r2, zero
PositionYxiaoshu = NewPositionY - (UINT)NewPositionY;
0x80083168 storeBlock+0x134: 0c02b33a jal __ftou (0x800acce8)
0x8008316c storeBlock+0x138: 03c02025 or r4, r30, zero
0x80083170 storeBlock+0x13c: 0c02b260 jal __utof (0x800ac980)
0x80083174 storeBlock+0x140: 00402025 or r4, r2, zero
0x80083178 storeBlock+0x144: 03c02025 or r4, r30, zero
0x8008317c storeBlock+0x148: 0c02b689 jal __fsub (0x800ada24)
0x80083180 storeBlock+0x14c: 00402825 or r5, r2, zero
0x80083184 storeBlock+0x150: 0040a825 or r21, r2, zero
NewPositionY = ( 2*PositionYxiaoshu>1 )?( NewPositionY + 1 ) : ( NewPositionY );
0x80083188 storeBlock+0x154: 02a02825 or r5, r21, zero
0x8008318c storeBlock+0x158: 0c02b63f jal __fmul (0x800ad8fc)
0x80083190 storeBlock+0x15c: 8fa400d4 lw r4, 0xd4(sp)
0x80083194 storeBlock+0x160: 3c033f80 lui r3, 0x3f80
0x80083198 storeBlock+0x164: 0062182a slt r3, r3, r2
0x8008319c storeBlock+0x168: 10600005 beq r3, zero, storeBlock+0x180 (0x800831b4)
0x800831a0 storeBlock+0x16c: 00000000 nop
0x800831a4 storeBlock+0x170: 03c02025 or r4, r30, zero
0x800831a8 storeBlock+0x174: 0c02b68b jal __fadd (0x800ada2c)
0x800831ac storeBlock+0x178: 8fa500d0 lw r5, 0xd0(sp)
0x800831b0 storeBlock+0x17c: 0040f025 or r30, r2, zero
NewPositionY = (UINT)NewPositionY;
0x800831b4 storeBlock+0x180: 0c02b33a jal __ftou (0x800acce8)
0x800831b8 storeBlock+0x184: 03c02025 or r4, r30, zero
0x800831bc storeBlock+0x188: 0c02b260 jal __utof (0x800ac980)
0x800831c0 storeBlock+0x18c: 00402025 or r4, r2, zero
0x800831c4 storeBlock+0x190: 0040f025 or r30, r2, zero |
|