Upload
anonymous-0u4x6mgwp
View
234
Download
0
Embed Size (px)
Citation preview
8/16/2019 chap03 - CS MIPS
1/53
!"#$%&' )
*'+%",&%+- ./' !/,$0%&'1
8/16/2019 chap03 - CS MIPS
2/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 3
+',%"-&%,. /0' !0-$1%&'2
! !"#$%&'()* () '),#$*! -..'&'() %). */0&$%1&'()
! 2/3&'"3'1%&'() %). .'4'*'()
! 5#%3'), 6'&7 (4#$83(6! 93(%&'),:"(')& $#%3 )/;0#$*
!
8/16/2019 chap03 - CS MIPS
3/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * )
45%&6&' +77,%,05
! BC%;"3#D E F G
= > ?H - . . ' & ' () %) . I / 0 & $ % 1 & ' (
)
! !4#$83(6 '8 $#*/3& (/& (8 $%),#
! -..'), F4# %). J4# ("#$%).*K )( (4#$83(6
! -..'), &6( F4# ("#$%).*! !4#$83(6 '8 $#*/3& *',) '* @
! -..'), &6( J4# ("#$%).*! !4#$83(6 '8 $#*/3& *',) '* L
8/16/2019 chap03 - CS MIPS
4/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 8
45%&6&' 91:%'#.%,05
! -.. )#,%&'() (8 *#1(). ("#$%).! BC%;"3#D E J G M E F NJGO
FED LLLL LLLL P LLLL L@@@ JGD @@@@ @@@@ P @@@@ @L@L
F@D LLLL LLLL P LLLL LLL@
! !4#$83(6 '8 $#*/3& (/& (8 $%),#
! I/0&$%1&'), &6( F4# ($ &6( J4# ("#$%).*K )( (4#$83(6
! I/0&$%1&'), F4# 8$(; J4# ("#$%).! !4#$83(6 '8 $#*/3& *',) '* L
! I/0&$%1&'), J4# 8$(; F4# ("#$%).! !4#$83(6 '8 $#*/3& *',) '* @
8/16/2019 chap03 - CS MIPS
5/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * ;
,%" ?@&'/=0>
! I(;# 3%),/%,#* N#?,?K QO ',)($# (4#$83(6! R*# 2ASI adduK adduiK subu ')*&$/1&'()*
! !&7#$ 3%),/%,#* N#?,?K -.%K 9($&$%)O$#T/'$# $%'*'), %) #C1#"&'()! R*# 2ASI addK addiK sub ')*&$/1&'()*
! !) (4#$83(6K ')4(U# #C1#"&'() 7%).3#$ ! I%4# SQ ') #C1#"&'() "$(,$%; 1(/)$ NBSQO
$#,'*$
! V/;" &( "$#.#8')#. 7%).3#$ %..$#**
! mfc0 N;(4# 8$(; 1("$(1#**($ $#,O ')*&$/1&'() 1%)$#&$'#4# BSQ 4%3/#K &( $#&/$) %8$ 1($$#1&'4# %1&'()
8/16/2019 chap03 - CS MIPS
6/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * A
+',%"-&%,. /0' B1=%,-&7,#
! W$%"7'1* %). ;#.'% "$(1#**'), ("#$%*() 4#1&($* (8 X:0'& %). @G:0'& .%&%
! R*# GY:0'& %..#$K 6'&7 "%$&'&'()#. 1%$$Z 17%')
! !"#$% () X[X:0'&K Y[@G:0'&K ($ H[>H:0'& 4#1&($*
! IA25 N*'),3#:')*&$/1&'()K ;/3&'"3#:.%&%O
! I%&/$%&'), ("#$%&'()*
! !) (4#$83(6K $#*/3& '* 3%$,#*& $#"$#*#)&%03#4%3/#
! 1?8? H*:1(;"3#;#)& ;(./3( %$'&7;#&'1
! B?,?K 13'""'), ') %/.'(K *%&/$%&'() ') 4'.#(
8/16/2019 chap03 - CS MIPS
7/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * C
B1=%,$=,.#%,05
! I&%$& 6'&7 3(),:;/3&'"3'1%&'() %""$(%17
1000! 1001
10000000000010001001000
\#),&7 (8 "$(./1& '*&7# */; (8 ("#$%).
3#),&7*
;/3&'"3'1%).
;/3&'"3'#$
"$(./1&
= > ? > 2 /3 & ' "3 ' 1 % & ' ()
8/16/2019 chap03 - CS MIPS
8/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * D
B1=%,$=,.#%,05 E#'7>#'&
!"#$#%&&' )
8/16/2019 chap03 - CS MIPS
9/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * F
?$%,-,G&7 B1=%,$=,&'
! S#$8($; *"* ') "%$%33#3D %..]*7'8&
! !)# 1Z13# "#$ "%$&'%3:"$(./1& %..'&'()
! ^7%&_* (UK '8 8$#T/#)1Z (8 ;/3&'"3'1%&'()* '* 3(6
8/16/2019 chap03 - CS MIPS
10/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * HI
J#2%&' B1=%,$=,&'
! R*#* ;/3&'"3# %..#$*! Q(*&]"#$8($;%)1# &$%.#(88
! Q%) 0# "'"#3')#.
! I#4#$%3 ;/3&'"3'1%&'() "#$8($;#. ') "%$%33#3
8/16/2019 chap03 - CS MIPS
11/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * HH
B4K9 B1=%,$=,.#%,05
! ^6( >H:0'& $#,'*$* 8($ "$(./1&! `AD ;(*&:*',)'8'1%)& >H 0'&*
! \!D 3#%*&:*',)'8'1%)& >H:0'&*
! A)*&$/1&'()*
! mult rs, rt / multu rs, rt
! GY:0'& "$(./1& ') `A]\!
! mfhi rd / mflo rd
! 2(4# 8$(; ̀ A]\! &( $.
! Q%) *& `A 4%3/# &( *## '8 "$(./1& (4#$83(6* >H 0'&*
! mul rd, rs, rt
! \#%*&:*',)'8'1%)& >H 0'&* (8 "$(./1& Ja $.
8/16/2019 chap03 - CS MIPS
12/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * H3
8/16/2019 chap03 - CS MIPS
13/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * H)
8/16/2019 chap03 - CS MIPS
14/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * H8
?$%,-,G&7
8/16/2019 chap03 - CS MIPS
15/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * H;
J#2%&'
8/16/2019 chap03 - CS MIPS
16/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * HA
B4K9
8/16/2019 chap03 - CS MIPS
17/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * HC
J=0#%,56 K0,5%
!
8/16/2019 chap03 - CS MIPS
18/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * HD
J=0#%,56 K0,5% 9%#57#'7
! 5#8')#. 0Z ABBB I&. EgY:@hXg! 5#4#3("#. ') $#*"()*# &( .'4#$,#)1# (8
$#"$#*#)&%&'()*
! S($&%0'3'&Z '**/#* 8($ *1'#)&'8'1 1(.#! f(6 %3;(*& /)'4#$*%33Z %.(".
! ^6( $#"$#*#)&%&'()*
! I'),3# "$#1'*'() N>H:0'&O! 5(/03# "$#1'*'() NGY:0'&O
8/16/2019 chap03 - CS MIPS
19/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * HF
4LLL J=0#%,56MK0,5% J0'-#%
! ID *',) 0'& NL ! )():)#,%&'4#K @! )#,%&'4#O! f($;%3'j# *',)'8'1%).D @?L b k*',)'8'1%).k c H?L
! -36%Z* 7%* % 3#%.'), "$#:0')%$Z:"(')& @ 0'&K *( )( )##. &(
$#"$#*#)& '& #C"3'1'&3Z N7'..#) 0'&O! I',)'8'1%). '* 9$%1&'() 6'&7 &7# l@?m $#*&($#.
! BC"()#)&D #C1#** $#"$#*#)&%&'()D %1&/%3 #C"()#)& F n'%*! B)*/$#* #C"()#)& '* /)*',)#.! I'),3#D n'%* M @HEo 5(/03#D n'%* M @HL>
I BC"()#)& 9$%1&'()
*#"+&,- . /#$*012/&,- 33 /#$* *#"+&,- 45 /#$*012/&,- 64 /#$*
!"#$%&'()*+,+-.
/01#2-"*+%&33%&(
!
"+"!=
8/16/2019 chap03 - CS MIPS
20/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 3I
9,56=&MK'&.,2,05 N#56&
! BC"()#)&* LLLLLLLL %). @@@@@@@@ $#*#$4#.! I;%33#*& 4%3/#
! BC"()#)&D LLLLLLL@! %1&/%3 #C"()#)& M @ J @HE M J@HG
! 9$%1&'()D LLLPLL ! *',)'8'1%). M @?L! i@?L [ H J@HG p i@?H [ @L J>X
! \%$,#*& 4%3/#
! #C"()#)&D @@@@@@@L! %1&/%3 #C"()#)& M HgY J @HE M F@HE
! 9$%1&'()D @@@P@@ ! *',)'8'1%). p H?L
! iH?L [ HF@HE p i>?Y [ @LF>X
8/16/2019 chap03 - CS MIPS
21/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 3H
8/16/2019 chap03 - CS MIPS
22/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 33
J=0#%,56MK0,5% K'&.,2,05
! [ 3(,@L
H p H> [ L?> p G .#1';%3.','&* (8 "$#1'*'()
! 5(/03#D %""$(C H JgH
! BT/'4%3#)& &( gH [ 3(,@LH p gH [ L?> p @G .#1';%3
.','&* (8 "$#1'*'()
8/16/2019 chap03 - CS MIPS
23/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 3)
J=0#%,56MK0,5% LO#-$=&
! M @LHH M L@@@@@@@@@LH
! I'),3#D @L@@@@@@L@LLLPLL
! 5(/03#D @L@@@@@@@@@L@LLLPLL
8/16/2019 chap03 - CS MIPS
24/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 38
J=0#%,56MK0,5% LO#-$=&
! q7%& )/;0#$ '* $#"$#*#). 0Z &7# *'),3#:"$#1'*'() 83(%&
@@LLLLLL@L@LLLPLL! I M @
! 9$%1&'() M L@LLLPLLH! 9C"()#)& M @LLLLLL@H M @Hh
! C M NJ@O@ [ N@ F L@HO [ HN@Hh J @HEO
M NJ@O [ @?Hg [ HH
M Jg?L
8/16/2019 chap03 - CS MIPS
25/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 3;
8/16/2019 chap03 - CS MIPS
26/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 3A
45/,5,%,&2 #57 P#P2
! BC"()#)& M @@@???@K 9$%1&'() M LLL???L! iA)8')'&Z
! Q%) 0# /*#. ') */0*#T/#)& 1%31/3%&'()*K%4('.'), )##. 8($ (4#$83(6 17#1U
! BC"()#)& M @@@???@K 9$%1&'() r LLL???L
! f(&:%:f/;0#$ Nf%fO
! A).'1%* '33#,%3 ($ /).#8')#. $#*/3&
! #?,?K L?L ] L?L
! Q%) 0# /*#. ') */0*#T/#)& 1%31/3%&'()*
8/16/2019 chap03 - CS MIPS
27/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 3C
J=0#%,56MK0,5% +77,%,05
!
Q()*'.#$ % Y:.','& .#1';%3 #C%;"3#! h?hhh [ @L@ F @?G@L [ @L J@
! @? -3',) .#1';%3 "(')&*! I7'8& )/;0#$ 6'&7 *;%33#$ #C"()#)&
! h?hhh [ @L@
F L?L@G [ @L@
! H? -.. *',)'8'1%).*! h?hhh [ @L@ F L?L@G [ @L@ M @L?L@g [ @L@
! >? f($;%3'j# $#*/3& s 17#1U 8($ (4#$]/).#$83(6! @?LL@g [ @LH
! Y?
8/16/2019 chap03 - CS MIPS
28/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 3D
J=0#%,56MK0,5% +77,%,05
!
f(6 1()*'.#$ % Y:.','& 0')%$Z #C%;"3#! @?LLLH [ H
J@ F J@?@@LH [ H JH NL?g F JL?Y>EgO
! @? -3',) 0')%$Z "(')&*! I7'8& )/;0#$ 6'&7 *;%33#$ #C"()#)&
! @?LLLH [ H J@
F JL?@@@H [ H J@
! H? -.. *',)'8'1%).*! @?LLLH [ H
J@ F JL?@@@H [ H J@ M L?LL@H [ H
J@
! >? f($;%3'j# $#*/3& s 17#1U 8($ (4#$]/).#$83(6! @?LLLH [ H JYK 6'&7 )( (4#$]/).#$83(6
! Y?
8/16/2019 chap03 - CS MIPS
29/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 3F
JK +77&' E#'7>#'&
! 2/17 ;($# 1(;"3#C &7%) '),#$ %..#$ ! 5('), '& ') ()# 13(1U 1Z13# 6(/3. &%U# &((
3(),
! 2/17 3(),#$ &7%) '),#$ ("#$%&'()*! I3(6#$ 13(1U 6(/3. "#)%3'j# %33 ')*&$/1&'()*
! 9S %..#$ /*/%33Z &%U#* *#4#$%3 1Z13#*
!
Q%) 0# "'"#3')#.
8/16/2019 chap03 - CS MIPS
30/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * )I
JK +77&' E#'7>#'&
I" @
I" H
I" >
I" Y
8/16/2019 chap03 - CS MIPS
31/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * )H
J=0#%,56MK0,5% B1=%,$=,.#%,05
! Q()*'.#$ % Y:.','& .#1';%3 #C%;"3#! @?@@L [ @L@L [ h?HLL [ @L Jg
! @? -.. #C"()#)&*! 9($ 0'%*#. #C"()#)&*K */0&$%1& 0'%* 8$(; */;
! f#6 #C"()#)& M @L F Jg M g
! H? 2/3&'"3Z *',)'8'1%).*! @?@@L [ h?HLL M @L?H@H ! @L?H@H [ @Lg
! >? f($;%3'j# $#*/3& s 17#1U 8($ (4#$]/).#$83(6! @?LH@H [ @LG
! Y?
8/16/2019 chap03 - CS MIPS
32/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * )3
J=0#%,56MK0,5% B1=%,$=,.#%,05
! f(6 1()*'.#$ % Y:.','& 0')%$Z #C%;"3#! @?LLLH [ H J@ [ J@?@@LH [ H JH NL?g [ JL?Y>EgO
! @? -.. #C"()#)&*! R)0'%*#.D J@ F JH M J>
! n'%*#.D NJ@ F @HEO F NJH F @HEO M J> F HgY J @HE M J> F @HE
! H? 2/3&'"3Z *',)'8'1%).*! @?LLLH [ @?@@LH M @?@@LH ! @?@@LH [ H J>
! >? f($;%3'j# $#*/3& s 17#1U 8($ (4#$]/).#$83(6! @?@@LH [ H J> N)( 17%),#O 6'&7 )( (4#$]/).#$83(6
! Y? N)( 17%),#O
! g? 5#$;')# *',)D F4# [ J4# ! J4#! J@?@@LH [ H J> M JL?H@XEg
8/16/2019 chap03 - CS MIPS
33/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * ))
JK +',%"-&%,. E#'7>#'&
! 9S ;/3&'"3'#$ '* (8 *';'3%$ 1(;"3#C'&Z &( 9S%..#$ ! n/& /*#* % ;/3&'"3'#$ 8($ *',)'8'1%).* ')*%. (8
%) %..#$
! 9S %$'&7;#&'1 7%$.6%$# /*/%33Z .(#*! -..'&'()K */0&$%1&'()K ;/3&'"3'1%&'()K .'4'*'()K
$#1'"$(1%3K *T/%$#:$((&
! 9S" '),#$ 1()4#$*'()
! !"#$%&'()* /*/%33Z &%U#* *#4#$%3 1Z13#*! Q%) 0# "'"#3')#.
8/16/2019 chap03 - CS MIPS
34/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * )8
JK 452%'1.%,052 ,5 B4K9
! 9S 7%$.6%$# '* 1("$(1#**($ @! -.d/)1& "$(1#**($ &7%& #C).* &7# AI-
! I#"%$% 9S $#,'*$*! >H *'),3#:"$#1'*'()D t8LK t8@K P t8>@! S%'$#. 8($ .(/03#:"$#1'*'()D t8L]t8@K t8H]t8>K P
! H [ GY:0'& 9S $#,_*
! 9S ')*&$/1&'()* ("#$% ()3Z () 9S $#,'*$*! S$(,$%;* ,#)#$%33Z .()_& .( '),#$ ("* () 9S .%&%K
($ 4'1# 4#$*%!
2($# $#,'*$* 6'&7 ;')';%3 1(.#:*'j# ';"%1&! 9S 3(%. %). *&($# ')*&$/1&'()*
! lwc1K ldc1K swc1K sdc1! #?,?K ldc1 $f8, 32($sp)
8/16/2019 chap03 - CS MIPS
35/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * );
JK 452%'1.%,052 ,5 B4K9
! I'),3#:"$#1'*'() %$'&7;#&'1! add.sK sub.sK mul.sK .'4?*
! #?,?K add.s $f0, $f1, $f6
! 5(/03#:"$#1'*'() %$'&7;#&'1! add.dK sub.dK mul.dK div.d
! #?,?K mul.d $f4, $f4, $f6! I'),3#: %). .(/03#:"$#1'*'() 1(;"%$'*()
! c.xx .sK c.xx .d N "" '* eqK ltK leK PO! I#&* ($ 13#%$* 9S 1().'&'():1(.# 0'&
! #?,? c.lt.s $f3, $f4
! n$%)17 () 9S 1().'&'() 1(.# &$/# ($ 8%3*#! bc1tK bc1f
! #?,?K bc1t TargetLabel
8/16/2019 chap03 - CS MIPS
36/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * )A
JK LO#-$=&Q RJ %0 R!
!
Q 1(.#Dfloat f2c (float fahr) {return ((5.0/9.0)*(fahr - 32.0));
}
! fahr ') t8@HK $#*/3& ') t8LK 3'$%3* ') ,3(0%3 ;#;($Z
*"%1#! Q(;"'3#. 2ASI 1(.#Df2c: lwc1 $f16, const5($gp)
lwc2 $f18, const9($gp)
div.s $f16, $f16, $f18lwc1 $f18, const32($gp)sub.s $f18, $f12, $f18mul.s $f0, $f16, $f18jr $ra
8/16/2019 chap03 - CS MIPS
37/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * )C
JK LO#-$=&Q +''#S B1=%,$=,.#%,05
!
u M u F v [ w! -33 >H [ >H ;%&$'1#*K GY:0'& .(/03#:"$#1'*'() #3#;#)&*
! Q 1(.#Dvoid mm (double x[][],
double y[][], double z[][]) {int i, j, k;for (i = 0; i! = 32; i = i + 1)
for (j = 0; j! = 32; j = j + 1)for (k = 0; k! = 32; k = k + 1)
x[i][j] = x[i][j]+ y[i][k] * z[k][j];
}
! -..$#**#* (8 xK yK z ') t%LK t%@K t%HK %).iK jK k ') t*LK t*@K t*H
8/16/2019 chap03 - CS MIPS
38/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * )D
JK LO#-$=&Q +''#S B1=%,$=,.#%,05
!
2ASI 1(.#Dli $t1, 32 # $t1 = 32 (row size/loop end)li $s0, 0 # i = 0; initialize 1st for loop
L1: li $s1, 0 # j = 0; restart 2nd for loop
L2: li $s2, 0 # k = 0; restart 3rd for loop
sll $t2, $s0, 5 # $t2 = i * 32 (size of row of x)
addu $t2, $t2, $s1 # $t2 = i * size(row) + j
sll $t2, $t2, 3 # $t2 = byte offset of [i][j]
addu $t2, $a0, $t2 # $t2 = byte address of x[i][j]
l.d $f4, 0($t2) # $f4 = 8 bytes of x[i][j]
L3: sll $t0, $s2, 5 # $t0 = k * 32 (size of row of z)
addu $t0, $t0, $s1 # $t0 = k * size(row) + jsll $t0, $t0, 3 # $t0 = byte offset of [k][j]
addu $t0, $a2, $t0 # $t0 = byte address of z[k][j]
l.d $f16, 0($t0) # $f16 = 8 bytes of z[k][j]
…
8/16/2019 chap03 - CS MIPS
39/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * )F
JK LO#-$=&Q +''#S B1=%,$=,.#%,05
…
sll $t0, $s0, 5 # $t0 = i*32 (size of row of y)
addu $t0, $t0, $s2 # $t0 = i*size(row) + k
sll $t0, $t0, 3 # $t0 = byte offset of [i][k]
addu $t0, $a1, $t0 # $t0 = byte address of y[i][k]
l.d $f18, 0($t0) # $f18 = 8 bytes of y[i][k]
mul.d $f16, $f18, $f16 # $f16 = y[i][k] * z[k][j]add.d $f4, $f4, $f16 # f4=x[i][j] + y[i][k]*z[k][j]
addiu $s2, $s2, 1 # $k k + 1
bne $s2, $t1, L3 # if (k != 32) go to L3
s.d $f4, 0($t2) # x[i][j] = $f4
addiu $s1, $s1, 1 # $j = j + 1
bne $s1, $t1, L2 # if (j != 32) go to L2
addiu $s0, $s0, 1 # $i = i + 1
bne $s0, $t1, L1 # if (i != 32) go to L1
8/16/2019 chap03 - CS MIPS
40/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 8I
+..1'#%& +',%"-&%,.
!
ABBB I&. EgY *"#1'8'#* %..'&'()%3 $(/).'),1()&$(3! BC&$% 0'&* (8 "$#1'*'() N,/%$.K $(/).K *&'1UZO
! Q7('1# (8 $(/).'), ;(.#*
! -33(6* "$(,$%;;#$ &( 8')#:&/)# )/;#$'1%3 0#7%4'($ (8% 1(;"/&%&'()
! f(& %33 9S /)'&* ';"3#;#)& %33 ("&'()*! 2(*& "$(,$%;;'), 3%),/%,#* %). 9S 3'0$%$'#* d/*&
/*# .#8%/3&*
! ^$%.#:(88 0#&6##) 7%$.6%$# 1(;"3#C'&ZK"#$8($;%)1#K %). ;%$U#& $#T/'$#;#)&*
=
8/16/2019 chap03 - CS MIPS
41/53
91:>0'7 K#'#==&==,2-
! W$%"7'1* %). %/.'( %""3'1%&'()* 1%) &%U#%.4%)&%,# (8 "#$8($;'), *';/3&%)#(/*("#$%&'()* () *7($& 4#1&($*
! BC%;"3#D @HX:0'& %..#$D
! I'C#) X:0'& %..*
! B',7& @G:0'& %..*
! 9(/$ >H:0'& %..*
! -3*( 1%33#. .%&%:3#4#3 "%$%33#3'*;K 4#1&($"%$%33#3'*;K ($ I'),3# A)*&$/1&'()K 2/3&'"3#5%&% NIA25O
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 8H
= > ? G S %$ %3 3 #3 ' * ; %) . Q (; " / & #$ - $ ' & 7 ; # & ' 1 D I /
0 6 ($ . S %$ %3 3 #3 ' *
;
=
8/16/2019 chap03 - CS MIPS
42/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 83
ODA JK +'.",%&.%1'&
!
!$',')%33Z 0%*#. () XLXE 9S 1("$(1#**($ ! X [ XL:0'& #C).#.:"$#1'*'() $#,'*$*
! R*#. %* % "/*7:.(6) *&%1U
! H:0'& ($ GY ') ;#;($Z! Q()4#$. () 3(%.]*&($# (8 ;#;($Z ("#$%).
! A),#$ ("#$%).* 1%) %3*( 0# 1()4#$.() 3(%.]*&($#
! x#$Z .'88'1/3& &( ,#)#$% %). ("&';'j# 1(.#
! ?E < # %3 I & /8 8 D I & $ # %;' ) , I A 25
B C & #) * ' () *
%) . - x u ' )C X G
8/16/2019 chap03 - CS MIPS
43/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 8)
ODA JK 452%'1.%,052
! !"&'()%3 4%$'%&'()*
! ID '),#$ ("#$%).! PD "(" ("#$%). 8$(; *&%1U! RD $#4#$*# ("#$%). ($.#$ ! n/& )(& %33 1(;0')%&'()* %33(6#.
5%&% &$%)*8#$ -$'&7;#&'1 Q(;"%$# $̂%)*1#).#)&%3FILD mem/ST(i)
FISTP mem/ST(i)
FLDPI
FLD1
FLDZ
FIADDP mem/ST(i)
FISUBRP mem/ST(i)FIMULP mem/ST(i)
FIDIVRP mem/ST(i)
FSQRT
FABS
FRNDINT
FICOMP
FIUCOMP
FSTSW AX/mem
FPATAN
F2XMI
FCOS
FPTAN
FPREMFPSIN
FYL2X
8/16/2019 chap03 - CS MIPS
44/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 88
9%'-,56 94B< LO%&52,05 3 T99L3U
! -..* Y [ @HX:0'& $#,'*$*! BC).#. &( X $#,'*$* ') -25GY]B2GY^
! Q%) 0# /*#. 8($ ;/3&'"3# 9S ("#$%).*
! H [ GY:0'& .(/03# "$#1'*'()! Y [ >H:0'& .(/03# "$#1'*'()
! A)*&$/1&'()* ("#$% () &7#; *';/3&%)#(/*3Z
! I'),3#:A)*&$/1&'() 2/3&'"3#:5%&%
=
8/16/2019 chap03 - CS MIPS
45/53
B#%',O B1=%,$=S
! R)("&';'j#. 1(.#D
1. void dgemm (int n, double* A, double* B, double* C)
2. {
3. for (int i = 0; i < n; ++i)
4. for (int j = 0; j < n; ++j)
5. {
6. double cij = C[i+j*n]; /* cij = C[i][j] */
7. for(int k = 0; k < n; k++ )
8. cij += A[i+k*n] * B[k+j*n]; /* cij += A[i][k]*B[k][j] */
9. C[i+j*n] = cij; /* C[i][j] = cij */10. }
11. }
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 8;
> ? X W (' ) ,9
% * & #$ D I / 0 6 ($ .
S %$ %3 3 #3 ' * ; %) .
2 % & $ ' C 2 /3 & ' "3 Z
=
8/16/2019 chap03 - CS MIPS
46/53
B#%',O B1=%,$=S
! CXG %**#;03Z 1(.#D1. vmovsd (%r10),%xmm0 # Load 1 element of C into %xmm02. mov %rsi,%rcx # register %rcx = %rsi
3. xor %eax,%eax # register %eax = 0
4. vmovsd (%rcx),%xmm1 # Load 1 element of B into %xmm1
5. add %r9,%rcx # register %rcx = %rcx + %r96. vmulsd (%r8,%rax,8),%xmm1,%xmm1 # Multiply %xmm1,
element of A
7. add $0x1,%rax # register %rax = %rax + 1
8. cmp %eax,%edi # compare %eax to %edi
9. vaddsd %xmm1,%xmm0,%xmm0 # Add %xmm1, %xmm010. jg 30 # jump if %eax > %edi
11. add $0x1,%r11d # register %r11 = %r11 + 1
12. vmovsd %xmm0,(%r10) # Store %xmm0 into C element
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 8A
> ? X W (' ) ,9
% * & #$ D I / 0 6 ($ .
S %$ %3 3 #3 ' * ; %) .
2 % & $ ' C 2 /3 & ' "3 Z
=
8/16/2019 chap03 - CS MIPS
47/53
B#%',O B1=%,$=S
! !"&';'j#. Q 1(.#D1. #include 2. void dgemm (int n, double* A, double* B, double* C)
3. {
4. for ( int i = 0; i < n; i+=4 )
5. for ( int j = 0; j < n; j++ ) {6. __m256d c0 = _mm256_load_pd(C+i+j*n); /* c0 = C[i][j]
*/
7. for( int k = 0; k < n; k++ )
8. c0 = _mm256_add_pd(c0, /* c0 += A[i][k]*B[k][j] */
9. _mm256_mul_pd(_mm256_load_pd(A+i+k*n),10. _mm256_broadcast_sd(B+k+j*n)));
11. _mm256_store_pd(C+i+j*n, c0); /* C[i][j] = c0 */
12. }
13. }
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 8C
>? X W (' ) ,9
% * & #$ D I / 0 6 ($ .
S %$ %3 3 #3 ' * ; %) .
2 % & $ ' C 2 /3 & ' "3 Z
= >
8/16/2019 chap03 - CS MIPS
48/53
B#%',O B1=%,$=S
! !"&';'j#. CXG %**#;03Z 1(.#D1. vmovapd (%r11),%ymm0 # Load 4 elements of C into %ymm02. mov %rbx,%rcx # register %rcx = %rbx
3. xor %eax,%eax # register %eax = 0
4. vbroadcastsd (%rax,%r8,1),%ymm1 # Make 4 copies of B element
5. add $0x8,%rax # register %rax = %rax + 8
6. vmulpd (%rcx),%ymm1,%ymm1 # Parallel mul %ymm1,4 A elements
7. add %r9,%rcx # register %rcx = %rcx + %r9
8. cmp %r10,%rax # compare %r10 to %rax
9. vaddpd %ymm1,%ymm0,%ymm0 # Parallel add %ymm1, %ymm0
10. jne 50 # jump if not %r10 != %rax
11. add $0x1,%esi # register % esi = % esi + 112. vmovapd %ymm0,(%r11) # Store %ymm0 into 4 C elements
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 8D
>? X W (' ) ,9
% * & #$ D I / 0 6 ($ .
S %$ %3 3 #3 ' * ; %) .
2 % & $ ' C 2 /3 & ' "3 Z
= >
8/16/2019 chap03 - CS MIPS
49/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * 8F
N,6"% 9",/% #57
8/16/2019 chap03 - CS MIPS
50/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * ;I
+220.,#%,@,%S
! S%$%33#3 "$(,$%;* ;%Z ')$3#%4#("#$%&'()* ') /)#C"#1. ($.#$*
! -**/;"&'()* (8 %**(1'%&'4'&Z ;%Z 8%'3
!"#$%#& "#!$#&%" '()*+,#-. '()*+,#-.
$ ()*+,#-.
& ()+ ()+
()++,#++ +)++,#++
+)++,#++
()*+,#-.
! f##. &( 4%3'.% "%$%33#3 "$(,$%;* /).#$4%$Z'), .#,$##* (8 "%$%33#3'*;
8/16/2019 chap03 - CS MIPS
51/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * ;H
V"0 !#'&2 +:01% JK +..1'#.SW
! A;"($&%)& 8($ *1'#)&'8'1 1(.#! n/& 8($ #4#$Z.%Z 1()*/;#$ /*#y
! l2Z 0%)U 0%3%)1# '* (/& 0Z L?LLLH{em "
! ^7# A) S#)&'/; 95Ax 0/,
! ^7# ;%$U#& #C"#1&* %11/$%1Z
! I## Q(36#33K %&' )'!*$+, -&./!$01'2
= >
8/16/2019 chap03 - CS MIPS
52/53
!"#$%&' ) * +',%"-&%,. /0' !0-$1%&'2 * ;3
!05.=17,56 N&-#'X2
! n'&* 7%4# )( ')7#$#)& ;#%)'),! A)$"$#&%&'() .#"#).* () &7# ')*&$/1&'()*
%""3'#.
! Q(;"/$ $#"$#*#)&%&'()* (8 )/;0#$*
! 9')' $%),# %). "$#1'*'()
! f##. &( %11(/)& 8($ &7'* ') "$(,$%;*
>? h Q () 1 3 / .
' ) ,< #; %$ U *
8/16/2019 chap03 - CS MIPS
53/53
!" % ) + ,%" %, / ! % ;)
!05.=17,56 N&-#'X2
! AI-* */""($& %$'&7;#&'1! I',)#. %). /)*',)#. '),#$*
! 93(%&'),:"(')& %""$(C';%&'() &( $#%3*
!
n(/).#. $%),# %). "$#1'*'()! !"#$%&'()* 1%) (4#$83(6 %). /).#$83(6
! 2ASI AI-
!
Q($# ')*&$/1&'()*D gY ;(*& 8$#T/#)&3Z /*#.! @LL| (8 ISBQAf^K hE| (8 ISBQ9S
! !&7#$ ')*&$/1&'()*D 3#** 8$#T/#)&