LINUX.ORG.RU

[gcc] Отличие mips64 от mips4

 


0

1

Подскажите в чём отличие набора инструкций mips4 от mips64. Т.е. то что в gcc задается флагом -march=mips4, -march=mips64, или просто -mips4, -mips64. Про разницу abi ( -mabi ) т.е. o32, n32, n64 - документации хватает, Про mips4 тоже есть документация, А вот c mips64 непонятно что. То ли это черновой вариант так и неродившигося MIPS V , то ли mips4 с плюшками, то ли вообще из другой оперы - непонятно. Ман к gcc ничего не говорит, гугл тоже вроде как молчит, ссылками на abi закидывает. Т.е. конкретно интересует разница между:

$ gcc -O2 -mips4 -o test  test.c  
$ file test
test: ELF 64-bit MSB executable, MIPS, MIPS-IV version 1, dynamically linked (uses shared libs), not stripped 

и

$ gcc -O2 -mips64 -o test  test.c  
$ file test
test: ELF 64-bit MSB executable, MIPS, MIPS64 version 1, dynamically linked (uses shared libs), not stripped 

Пытался поковыряться с objdump, но ввиду наличия совсем другого образования ничего из этого не вышло, чтобы могло для меня прояснить ситуацию.

P.S. Пытаюсь немного «ускорить» роутер. Захлебывается иногда на openvpn + lzo шифровании. Первоначально всё было собрано с mips3, Прочитал про улучшения в FPU и пересборка с mips4 дала прирост быстродействия заметное даже на глаз, процентов на 10-20. Когда первоначально ман gcc читал подумал что под -mips64 имеется ввиду abi. Потом заметил что это не так. Сейчас думаю стоит ли опять брать ключи в ЖЭСе и ползти на пыльный чердак многоэтажки за роутером и сидя без инета openvpn+lzo пересобирать, или овчинка не стоит выделки? Интересует разница только в производительности. Гуру embedded просветите.



Последнее исправление: OSBuster (всего исправлений: 2)

MIPS IV включил в себя:
Простой регистр + регистр адресации для загрузки и хранения чисел с плавающей точкой
Операции FMA и FMS с одинарной и двойной точности для чисел с плавающей точкой
Команды условного перехода для целых чисел и для чисел с плавающей точкой
Дополнительные условные биты в регистре контроля и состояния числа с плавающей точкой: в общей сложности 8 битов.

А MIPS64 основан на MIPS V (на 4-5 лет позже)

devl547 ★★★★★
()
Ответ на: комментарий от sn1ln

Ну, да вроде. Не знаю может ли это служить в качестве теста, но

#include <stdio.h>
#include <math.h>
int main(){
double i=5.54321;
double j=5.12345;
double x;
x=sqrt(i*j);
return 0;
}

Diff двух выводов «objdump -D»:

2c2
< test:     file format elf64-tradbigmips
---
> test64:     file format elf64-tradbigmips
19c19
<     100002c8:	4f70656e 	c3	0x170656e
---
>     100002c8:	4f70656e 	msub.ps	$f21,$f27,$f12,$f16
91c91
<     1000043c:	70000001 	0x70000001
---
>     1000043c:	70000001 	maddu	zero,zero
95c95
<     1000044c:	70000005 	0x70000005
---
>     1000044c:	70000005 	msubu	zero,zero
387c387
<     1000095c:	46006677 	c1	0x6677
---
>     1000095c:	46006677 	cabs.ule.s	$fcc6,$f12,$f0
884c884
<     100110d0:	4558544d 	0x4558544d
---
>     100110d0:	4558544d 	bc1any4f	$fcc6,10026208 <__JCR_END__+0x4db0>
940c940
<     100111c0:	454c4453 	0x454c4453
---
>     100111c0:	454c4453 	bc1any4f	$fcc3,10022310 <__JCR_END__+0xeb8>
946c946
<     100111d8:	454c4543 	0x454c4543
---
>     100111d8:	454c4543 	bc1any4f	$fcc3,100226e8 <__JCR_END__+0x1290>
1223c1223
<   14:	00000040 	sll	zero,zero,0x1
---
>   14:	00000040 	ssnop
OSBuster
() автор топика
Ответ на: комментарий от OSBuster

#include <stdio.h>

В тесте нету, по привычке набрал.

OSBuster
() автор топика
Ответ на: комментарий от OSBuster

Интересно, твой objdump не мог прочитать инструкции для мипс4. А код для мипс64 нормально показал. Что из этого работает быстрее сказать сложно.

sn1ln
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.