chap03 - CS MIPS

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/#)&