Мой компилятор MIPS сошел с ума, или я сошел с ума от выбора MIPS?

Я использую процессор MIPS (PIC32) во встроенном проекте, но начинаю сомневаться в своем выборе. {{ 1}} Я понимаю, что процессор RISC, такой как MIPS, будет генерировать больше инструкций, чем можно было бы ожидать, но я не думал, что это будет так. Вот отрывок из листинга дизассемблера:

225:                         LATDSET = 0x0040;
    sw          s1,24808(s2)
    sw          s4,24808(s2)
    sw          s4,24808(s2)
    sw          s1,24808(s2)
    sw          s4,24808(s3)
    sw          s4,24808(s3)
    sw          s1,24808(s3)

226:                         {

227:                             porte = PORTE;
    lw          t1,24848(s4)
    andi        v0,t1,0xffff
    lw          v1,24848(s6)
    andi        ra,v1,0xffff
    lw          v1,24848(s6)
    andi        ra,v1,0xffff
    lw          v0,24848(s6)
    andi        t2,v0,0xffff
    lw          a2,24848(s5)
    andi        v1,a2,0xffff
    lw          t2,24848(s5)
    andi        v1,t2,0xffff
    lw          v0,24848(s5)
    andi        t2,v0,0xffff

228:                             if (porte & 0x0004)
    andi        t2,v0,0x4
    andi        s8,ra,0x4
    andi        s8,ra,0x4
    andi        ra,t2,0x4
    andi        a1,v1,0x4
    andi        a2,v1,0x4
    andi        a2,t2,0x4

229:                                 pst_bytes_somi[0] |= sliding_bit;
    or          t3,t4,s0
    xori        a3,t2,0x0
    movz        t3,s0,a3
    addu        s0,t3,zero
    or          t3,t4,s1
    xori        a3,s8,0x0
    movz        t3,s1,a3
    addu        s1,t3,zero
    or          t3,t4,s1
    xori        a3,s8,0x0
    movz        t3,s1,a3
    addu        s1,t3,zero
    or          v1,t4,s0
    xori        a3,ra,0x0
    movz        v1,s0,a3
    addu        s0,v1,zero
    or          a0,t4,s2
    xori        a3,a1,0x0
    movz        a0,s2,a3
    addu        s2,a0,zero
    or          t3,t4,s2
    xori        a3,a2,0x0
    movz        t3,s2,a3
    addu        s2,t3,zero
    or          v1,t4,s0
    xori        a3,a2,0x0
    movz        v1,s0,a3

Это кажется сумасшедшим количеством инструкций для простого чтения / записи и тестирования переменных по фиксированным адресам. На другом процессоре я, вероятно, смог бы сократить каждый оператор C примерно до 1..3 инструкций, не прибегая к написанному вручную asm. Очевидно, что тактовая частота довольно высока, но она не в 10 раз выше, чем у меня в другом процессоре (например, dsPIC).

У меня оптимизация установлена ​​на максимум. Мой компилятор C ужасен (это gcc 3.4.4)? Или это типично для MIPS?

6
задан Rocketmagnet 6 October 2011 в 13:56
поделиться