-
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: "f-i-r" <f...@W...gazeta.pl>
Newsgroups: pl.comp.programming
Subject: Re: [asm/c] optymalizacja elementarnego raytracera
Date: Thu, 2 Aug 2012 08:18:11 +0000 (UTC)
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 210
Message-ID: <jvdd43$ghk$1@inews.gazeta.pl>
References: <jvbnoc$3rq$1@inews.gazeta.pl> <jvc1qd$fu3$1@inews.gazeta.pl>
NNTP-Posting-Host: localhost
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
X-Trace: inews.gazeta.pl 1343895491 16948 172.20.26.241 (2 Aug 2012 08:18:11 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Thu, 2 Aug 2012 08:18:11 +0000 (UTC)
X-User: fir
X-Forwarded-For: 178.56.65.144
X-Remote-IP: localhost
Xref: news-archive.icm.edu.pl pl.comp.programming:199069
[ ukryj nagłówki ]fir <f...@W...gazeta.pl> napisał(a):
> przegladam np asma generowanego przez borlanda i mam tam cos takiego
>
> ; intersectionPoint = add(ray0, scalarMul(distPlane, rayV));
> ;
> mov ecx,dword ptr [esp+296]
> mov dword ptr [esp+488],ecx
> mov ecx,dword ptr [esp+300]
> mov dword ptr [esp+492],ecx
> mov ecx,dword ptr [esp+304]
> mov dword ptr [esp+496],ecx
> mov eax,dword ptr [esp+88]
> mov dword ptr [esp+112],eax
> fld dword ptr [esp+488]
> fmul dword ptr [esp+112]
> fstp dword ptr [esp+500]
> fld dword ptr [esp+492]
> fmul dword ptr [esp+112]
> fstp dword ptr [esp+504]
> fld dword ptr [esp+496]
> fmul dword ptr [esp+112]
> fstp dword ptr [esp+508]
> mov edx,dword ptr [esp+500]
> mov dword ptr [esp+512],edx
> mov edx,dword ptr [esp+504]
> mov dword ptr [esp+516],edx
> mov edx,dword ptr [esp+508]
> mov dword ptr [esp+520],edx
> mov ecx,dword ptr [esp+284]
> mov dword ptr [esp+524],ecx
> mov ecx,dword ptr [esp+288]
> mov dword ptr [esp+528],ecx
> mov ecx,dword ptr [esp+292]
> mov dword ptr [esp+532],ecx
> fld dword ptr [esp+524]
> fadd dword ptr [esp+512]
> fstp dword ptr [esp+536]
> fld dword ptr [esp+528]
> fadd dword ptr [esp+516]
> fstp dword ptr [esp+540]
> fld dword ptr [esp+532]
> fadd dword ptr [esp+520]
> fstp dword ptr [esp+544]
> mov eax,dword ptr [esp+536]
> mov dword ptr [esp+428],eax
> mov eax,dword ptr [esp+540]
> mov dword ptr [esp+432],eax
> mov eax,dword ptr [esp+544]
> mov dword ptr [esp+436],eax
>
> nie rozumiem blokow tych movow - skad to sie wzielo i co to jest, ?
> normalnie to wydawaloby sie ze wystarczylo by chyba cos takiego
>
> fld dword ptr [rayV.x]
> fmul dword ptr [dist]
> fstp dword ptr [m.x]
> fld dword ptr [rayV.y]
> fmul dword ptr [dist]
> fstp dword ptr [m.y]
> fld dword ptr [rayV.z]
> fmul dword ptr [dist]
> fstp dword ptr [m.z]
>
> fld dword ptr [m.x]
> fadd dword ptr [ray0.x]
> fstp dword ptr [out.x]
> fld dword ptr [m.y]
> fadd dword ptr [ray0.y]
> fstp dword ptr [out.y]
> fld dword ptr [m.z]
> fadd dword ptr [ray0.z]
> fstp dword ptr [out.z]
>
> albo jeszcze mniej :O jek wytlumaczyc te masywne bloki mov'ow ?
>
>
to chyba dlatego, ze genrator faktycznie rozwija funkcje inline ale
nie klopocze sie by scalic output jednej do inputu drugiej tylko
robi na odzielnych i w srodku kopiuje ;-)
ale pozatym generuje w miare poprawny chyba kod np dla
inline float intersectRaySphere(float3* rO, float3* rV, float3* sO, float sR)
{
static float3 Q;
Q = sub(sO,rO);
float c = length(&Q);
float v = dot(&Q,rV);
float d = sR*sR - (c*c - v*v);
// If there was no intersection, return -1
if (d < 0.0) return (-1.0f);
// Return the distance to the [first] intersecting point
return (v - sqrt(d));
}
_TEXT segment dword public use32 'CODE'
@intersectRaySphere$qp6float3t1t1f segment virtual
align 2
@@intersectRaySphere$qp6float3t1t1f proc near
?live16492@0:
@1533:
push ebp
mov ebp,esp
add esp,-24
push ebx
push esi
push edi
?live16492@16: ; EDI = rV
add esp,-8
mov esi,dword ptr [ebp+16]
mov ebx,dword ptr [ebp+8]
?live16492@48: ;
mov edi,dword ptr [ebp+12]
?live16492@64: ; EDI = rV
fld dword ptr [esi]
fsub dword ptr [ebx]
fstp dword ptr [ebp-24]
fld dword ptr [esi+4]
fsub dword ptr [ebx+4]
fstp dword ptr [ebp-20]
fld dword ptr [esi+8]
fsub dword ptr [ebx+8]
fstp dword ptr [ebp-16]
mov eax,dword ptr [ebp-24]
mov dword ptr [$afdngfia],eax
mov eax,dword ptr [ebp-20]
mov dword ptr [$afdngfia+4],eax
mov eax,dword ptr [ebp-16]
mov dword ptr [$afdngfia+8],eax
fld dword ptr [$afdngfia]
fmul dword ptr [$afdngfia]
fld dword ptr [$afdngfia+4]
fmul dword ptr [$afdngfia+4]
faddp st(1),st
fld dword ptr [$afdngfia+8]
fmul dword ptr [$afdngfia+8]
faddp st(1),st
fstp qword ptr [esp]
call @_sqrt
fstp dword ptr [ebp-4]
fld dword ptr [$afdngfia]
fmul dword ptr [edi]
add esp,8
fld dword ptr [$afdngfia+4]
fmul dword ptr [edi+4]
faddp st(1),st
fld dword ptr [$afdngfia+8]
fmul dword ptr [edi+8]
faddp st(1),st
fstp dword ptr [ebp-8]
?live16492@144: ;
fld dword ptr [ebp-4]
fmul dword ptr [ebp-4]
fld dword ptr [ebp-8]
fmul dword ptr [ebp-8]
fsubp st(1),st
fld dword ptr [ebp+20]
fmul dword ptr [ebp+20]
fsubrp st(1),st
fstp dword ptr [ebp-12]
fld dword ptr [ebp-12]
fcomp dword ptr [@1535]
fnstsw ax
sahf
jae short @1534
fld dword ptr [@1535+4]
jmp short @1536
@1534:
add esp,-8
fld dword ptr [ebp-12]
fstp qword ptr [esp]
call @_sqrt
fsubr dword ptr [ebp-8]
add esp,8
@1537:
@1536:
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret
align 4
@1535:
db 0,0,0,0,0,0,128,191
@@intersectRaySphere$qp6float3t1t1f endp
@intersectRaySphere$qp6float3t1t1f ends
chyba nawet troche przyoptymalizowal uzywajac ebx esi i edi
zamiast odwolan do ramu,
z reki pewnie moglbym sie starac wlasnie powywalac ile sie da
odwolan do ramu na rzecz rejestrow i stacka fpu - ale musialbym
troche teraz doczytac o pisaniu asma na fpu, bo pozapominalem, nie
kojarze np jakich rejestrow mozna uzyc zamiast odwolan do ramu -
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Następne wpisy z tego wątku
- 02.08.12 11:16 f-i-r
- 02.08.12 12:24 R.e.m.e.K
- 02.08.12 12:36 M.M.
- 02.08.12 15:10 Adam Wysocki
- 02.08.12 17:25 Kviat
- 02.08.12 17:33 R.e.m.e.K
- 02.08.12 20:11 AK
- 03.08.12 08:04 AK
- 03.08.12 08:17 Adam Wysocki
- 03.08.12 17:46 fire
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2024-12-23 Riga => Specjalista ds. public relations <=
- 2024-12-23 Łódź => Specjalista ds. Sprzedaży <=
- 2024-12-23 Kraków => International Freight Forwarder <=
- 2024-12-23 Co nalezy do Cinkciarza, a co do Conotoxia ?
- 2024-12-23 Poznań => Key Account Manager <=
- 2024-12-23 Warszawa => Presales / Inżynier Wsparcia Technicznego IT <=
- 2024-12-23 Rzeszów => Spedytor Międzynarodowy <=
- 2024-12-23 Warszawa => Infrastructure Automation Engineer <=
- 2024-12-23 Białystok => Analityk w dziale Trade Development (doświadczenie z Po
- 2024-12-23 Warszawa => Site Reliability Engineer (SRE) <=
- 2024-12-23 Warszawa => DevOps Engineer <=
- 2024-12-23 Warszawa => Senior Account Manager <=
- 2024-12-23 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-23 Katowice => Administrator IT - Wirtualizacja i Konteneryzacja <=
- 2024-12-23 Mińsk Mazowiecki => Spedytor Międzynarodowy <=