darkoli Le Petit Dinosaure Bleu | tien voila aussi du code que j'avais fait avec C++ Builder
Code :
- //---------------------------------------------------------------------------
- // multiplication de matrices : matrices de taille 4x4 exclusivement
- // Code assembleur optimisé : dépendances entre les operations
- void Asm_Multiplication_de_matrice(/*double* matrice,double* matrice_,double* resultat_*/) {
- // [ A B C D ] [ Q ] [ U ]
- // [ E F G H ] [ R ] [ V ]
- // [ I J K L ] * [ S ], quatre fois = [ W ]
- // [ M N O P ] [ T ] [ X ]
- // matrice * chaque colonne de la matrice matrice_ = resultat_
- asm {
- // colonne 1 de la matrice résultat
- fld [matrice_ + 0] // Q
- fmul [matrice + 0] // A
- fld [matrice_ + 0] // Q
- fmul [matrice + 32] // E
- fld [matrice_ + 0] // Q
- fmul [matrice + 64] // I
- fld [matrice_ + 0] // Q
- fmul [matrice + 96] // M
- fld [matrice_ + 32] // R
- fmul [matrice + 8] // B
- fld [matrice_ + 32] // R
- fmul [matrice + 40] // F
- fld [matrice_ + 32] // R
- fmul [matrice + 72] // J
- fld [matrice_ + 32] // R
- fmul [matrice + 104] // N
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fld [matrice_ + 64] // S
- fmul [matrice + 16] // C
- fld [matrice_ + 64] // S
- fmul [matrice + 48] // G
- fld [matrice_ + 64] // S
- fmul [matrice + 80] // K
- fld [matrice_ + 64] // S
- fmul [matrice + 112] // O
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fld [matrice_ + 96] // T
- fmul [matrice + 24] // D
- fld [matrice_ + 96] // T
- fmul [matrice + 56] // H
- fld [matrice_ + 96] // T
- fmul [matrice + 88] // L
- fld [matrice_ + 96] // T
- fmul [matrice + 120] // P
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fxch st(3) // 4° <-> 1°
- fstp [resultat_ + 0]
- fstp [resultat_ + 64]
- fstp [resultat_ + 32]
- fstp [resultat_ + 96]
- // colonne 2 de la matrice résultat
- fld [matrice_ + 8] // Q
- fmul [matrice + 0] // A
- fld [matrice_ + 8] // Q
- fmul [matrice + 32] // E
- fld [matrice_ + 8] // Q
- fmul [matrice + 64] // I
- fld [matrice_ + 8] // Q
- fmul [matrice + 96] // M
- fld [matrice_ + 40] // R
- fmul [matrice + 8] // B
- fld [matrice_ + 40] // R
- fmul [matrice + 40] // F
- fld [matrice_ + 40] // R
- fmul [matrice + 72] // J
- fld [matrice_ + 40] // R
- fmul [matrice + 104] // N
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fld [matrice_ + 72] // S
- fmul [matrice + 16] // C
- fld [matrice_ + 72] // S
- fmul [matrice + 48] // G
- fld [matrice_ + 72] // S
- fmul [matrice + 80] // K
- fld [matrice_ + 72] // S
- fmul [matrice + 112] // O
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fld [matrice_ + 104] // T
- fmul [matrice + 24] // D
- fld [matrice_ + 104] // T
- fmul [matrice + 56] // H
- fld [matrice_ + 104] // T
- fmul [matrice + 88] // L
- fld [matrice_ + 104] // T
- fmul [matrice + 120] // P
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fxch st(3) // 4° <-> 1°
- fstp [resultat_ + 8]
- fstp [resultat_ + 72]
- fstp [resultat_ + 40]
- fstp [resultat_ + 104]
- // colonne 3 de la matrice résultat
- fld [matrice_ + 16] // Q
- fmul [matrice + 0] // A
- fld [matrice_ + 16] // Q
- fmul [matrice + 32] // E
- fld [matrice_ + 16] // Q
- fmul [matrice + 64] // I
- fld [matrice_ + 16] // Q
- fmul [matrice + 96] // M
- fld [matrice_ + 48] // R
- fmul [matrice + 8] // B
- fld [matrice_ + 48] // R
- fmul [matrice + 40] // F
- fld [matrice_ + 48] // R
- fmul [matrice + 72] // J
- fld [matrice_ + 48] // R
- fmul [matrice + 104] // N
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fld [matrice_ + 80] // S
- fmul [matrice + 16] // C
- fld [matrice_ + 80] // S
- fmul [matrice + 48] // G
- fld [matrice_ + 80] // S
- fmul [matrice + 80] // K
- fld [matrice_ + 80] // S
- fmul [matrice + 112] // O
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fld [matrice_ + 112] // T
- fmul [matrice + 24] // D
- fld [matrice_ + 112] // T
- fmul [matrice + 56] // H
- fld [matrice_ + 112] // T
- fmul [matrice + 88] // L
- fld [matrice_ + 112] // T
- fmul [matrice + 120] // P
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fxch st(3) // 4° <-> 1°
- fstp [resultat_ + 16]
- fstp [resultat_ + 80]
- fstp [resultat_ + 48]
- fstp [resultat_ + 112]
- // colonne 4 de la matrice résultat
- fld [matrice_ + 24] // Q
- fmul [matrice + 0] // A
- fld [matrice_ + 24] // Q
- fmul [matrice + 32] // E
- fld [matrice_ + 24] // Q
- fmul [matrice + 64] // I
- fld [matrice_ + 24] // Q
- fmul [matrice + 96] // M
- fld [matrice_ + 56] // R
- fmul [matrice + 8] // B
- fld [matrice_ + 56] // R
- fmul [matrice + 40] // F
- fld [matrice_ + 56] // R
- fmul [matrice + 72] // J
- fld [matrice_ + 56] // R
- fmul [matrice + 104] // N
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fld [matrice_ + 88] // S
- fmul [matrice + 16] // C
- fld [matrice_ + 88] // S
- fmul [matrice + 48] // G
- fld [matrice_ + 88] // S
- fmul [matrice + 80] // K
- fld [matrice_ + 88] // S
- fmul [matrice + 112] // O
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fld [matrice_ + 120] // T
- fmul [matrice + 24] // D
- fld [matrice_ + 120] // T
- fmul [matrice + 56] // H
- fld [matrice_ + 120] // T
- fmul [matrice + 88] // L
- fld [matrice_ + 120] // T
- fmul [matrice + 120] // P
- fxch st(3) // 4° <-> 1°
- faddp st(7),st(0)
- faddp st(4),st(0)
- faddp st(4),st(0)
- faddp st(1),st(0)
- fxch st(3) // 4° <-> 1°
- fstp [resultat_ + 24]
- fstp [resultat_ + 88]
- fstp [resultat_ + 56]
- fstp [resultat_ + 120]
- }
- }
- //---------------------------------------------------------------------------
|
|