From owner-FreeBSD-users-jp@jp.freebsd.org  Mon Nov 29 22:34:39 1999
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id WAA65085;
	Mon, 29 Nov 1999 22:34:39 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from jirass.chino.it.okayama-u.ac.jp (chino-gw.it.okayama-u.ac.jp [150.46.1.3])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id WAA65080
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 29 Nov 1999 22:34:38 +0900 (JST)
	(envelope-from kato@chino.it.okayama-u.ac.jp)
Received: from kanegon.chino.it.okayama-u.ac.jp.chino.it.okayama-u.ac.jp (kanegon [150.46.4.34])
	by jirass.chino.it.okayama-u.ac.jp (8.8.7/3.6W) with ESMTP id WAA09056;
	Mon, 29 Nov 1999 22:34:34 +0900 (JST)
Date: Mon, 29 Nov 1999 22:34:33 +0900
Message-ID: <14402.33001.725759.72159A@kanegon.chino.it.okayama-u.ac.jp>
From: Takekazu KATO <kato@chino.it.okayama-u.ac.jp>
To: FreeBSD-users-jp@jp.freebsd.org
User-Agent: Wanderlust/2.2.2 (You Could Be Mine) SEMI/1.13.6 (Komatsu) FLIM/1.13.2 (Kasanui) Emacs/20.3 (i386-unknown-freebsd2.2.5) MULE/4.0 (HANANOEN)
Organization: Okayama Univ.
MIME-Version: 1.0 (generated by SEMI 1.13.6 - "Komatsu")
Content-Type: text/plain; charset=ISO-2022-JP
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+990727
X-Sequence: FreeBSD-users-jp 47818
Subject: [FreeBSD-users-jp 47818] SSE on FreeBSD
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org
X-Originator: kato@chino.it.okayama-u.ac.jp

$B2CF#!w2,;3Bg(B $B$H$b$&$7$^$9!%(B

FreeBSD-3.3 $B$G(B MMX, SSE $B$rF0$+$=$&$H$7$F$$$^$9!%(B
MMX $B$OF0$$$?$s$G$9$,!$(BSSE $B$,$&$^$/F0$+$J$$$N$G!$<ALd$7$^$9!%(B

$B$I$3$^$G;n$7$?$+$r=g$rDI$C$F@bL@$7$^$9!%(B
$B$^$:(B MMX $B$K$D$$$F!$(Bgcc $B$N%$%s%i%$%s%"%;%s%V%i$r;H$C$F!$0J2<$N$h$&$J%3!<(B
$B%I$r=q$-$^$7$?!%(B

#include<stdio.h>

int main()
{
  char a[8]={0,1,2,3,4,5,6,7};
  char b[8]={7,6,5,4,3,2,1,0};
  char c[8];
  int i;
  asm(
      "movq (%0),%%mm0\n"
      "movq (%1),%%mm1\n"
      "psubusb %%mm1,%%mm0\n"
      "movq %%mm0,(%2)\n"
      "emms\n"
      :
      :"g"(a),"g"(b),"g"(c)
      );
  for(i=0;i<8;i++)
    printf(" %d",c[i]);
  printf("\n");
  return 0;
}

$B$3$l$r%3%s%Q%$%k!$<B9T$9$k$H(B
(a, b $B$=$l$>$l$NMWAG$N:9J,$r<h$k(B(0$B0J2<$O(B0$B$K$9$k(B)$B%W%m%0%i%`$G$9(B)

> mmx_test
 0 0 0 0 1 3 5 7

$B$N$h$&$KLdBj$J$/F0:n$7$^$9!%(B

$B<!$K(B PentiumIII $B$+$i3HD%$5$l$?(B MMX $BL?Na$r;H$C$F$_$^$7$?!%(B

#include<stdio.h>

int main()
{
  char a[8]={0,1,2,3,4,5,6,7};
  char b[8]={7,6,5,4,3,2,1,0};
  short c[4];
  int i;
  asm(
      "movq (%0),%%mm0\n"
      "movq (%1),%%mm1\n"
      //PASDBW %%mm1,%%mm0
      ".byte 0x0f\n"
      ".byte 0xf6\n"
      ".byte 0xc1\n"
      
      "movq %%mm0,(%2)\n"
      "emms\n"
      :
      :"g"(a),"g"(b),"g"(c)
      );
  printf(" %d",c[0]);
  printf("\n");
  return 0;
}


# /usr/bin/as $B$,(B PentiumIII $B$+$i$N3HD%L?Na$KBP1~$7$F$$$J$$$h$&$J$N$G!$(B
# $B%O%s%I%"%;%s%V%k$7$F!$(B.byte $B$GD>@\%^%7%s%3!<%I$r=q$$$F$$$^$9!%(B

$B$3$l$r<B9T$9$k$H(B(a,b $B$N@dBP:9$NOB$r<h$k%W%m%0%i%`$G$9(B)

> ./ex_mmx_test
 32

$B$H$3$l$bLdBj$J$/F0:n$7!$(BPentiumIII $B$+$iDI2C$5$l$?L?Na$,@5$7$/F0$$$F$$(B
$B$k$3$H$,$o$+$j$^$9!%(B

$B<!$K!$(BSSE $BL?Na$r;H$C$F$_$^$7$?!%(B

#include<stdio.h>

int main()
{
  float a[8]={0.0,1.0,2.0,3.0};
  float b[8];
  int i;
  asm(
      "movl %0,%%eax\n"
      //MOVAPS (%%eax),%%xmm0
      ".byte 0x0f\n"
      ".byte 0x28\n"
      ".byte 0x00\n"
      
      "movl %1,%%eax\n"
      
      //MOVAPS %%xmm0,(%%eax)
      ".byte 0x0f\n"
      ".byte 0x29\n"
      ".byte 0x00\n"
      :
      :"g"(a),"g"(b)
      :"eax"
      );
  for(i=0;i<4;i++)
    printf(" %f",b[i]);
  printf("\n");
  return 0;
}

$B$3$l$r%3%s%Q%$%k!$<B9T$9$k$H!$(B

>./sse_error__test 
zsh: illegal hardware instruction (core dumped)  ./sse_error__test

$B$H!$%(%i!<$,=P$F%3%"%@%s%W$7$F$7$^$$$^$9!%(B

$B$=$l$G!$(BIntel $B$N%^%K%e%"%k$H$+$rFI$s$G$_$k$H!$(BSSE $B$r;H$&$K$O(B OS $BB&$N%5(B
$B%]!<%H(B($B6qBNE*$K$O(B CR4.OSXSR$B$rM-8z$K$9$k$H$+!$$=$NB>$K$b$$$/$D$+$"$C$?(B)
$B$,I,MW$H$$$&$h$&$J$3$H$r=q$$$F$"$C$?$N$G(B FreeBSD $B$G$OBP1~$7$F$$$J$$$N(B
$B$G$O$J$$$+$H9M$($^$7$?!%(B


$B$=$l$G!$<ALd$J$s$G$9$,!$(BFreeBSD $B$G(B SSE $B$r;H$&$?$a$N%Q%C%A$H$+$OB8:_$7(B
$B$J$$$N$G$7$g$&$+!)(B
# Linux $B$N(B SSE $B$rF0$+$9%Q%C%A$H$$$&$N$OH/8+$7$^$7$?!%(B

$B$=$l$H$b$J$K$+;d$,4*0c$$$7$F$^$9$+!$$=$N>l9g$O;XE&$7$F$/$@$5$$!%(B

$B$3$3$G$OF0$$$F$$$k$h!$$H$+!$$3$&$9$l$PF0$/$s$8$c$J$$!)$H$+$N%"%I%P%$%9(B
$B$b4?7^$G$9!%EvJ}$G%F%9%H$9$k4D6-$O$"$j$^$9!%(B



$B$A$J$_$KEvJ}$N4D6-$O0J2<$NDL$j$G$9!%(B

> uname -r
3.3-RELEASE
> cc -v
gcc version 2.7.2.3
> as -v
GNU assembler version 2.9.1 (i386-unknown-freebsdelf), using BFD version 2.9.1


$B$"!$$"$H(B gas $B$N(B SSE $B%Q%C%A$C$F$$$&$N$,$"$l$P!$$=$&$$$&>pJs$b4?7^$G$9!%(B


$B$b$7$&$^$/F0$$$F!$$=$&$$$&%Z!<%8$,$J$1$l$P!$(BFreeBSD $B$G(B MMX, SSE $B$rF0$+(B
$B$9%N%&%O%&$H$+4XO"(B Link $B$J$s$+$r=8$a$F(B Web $B$G8x3+$7$F$$$3$&$+$H;W$C$F$^$9!%(B
MMX $B$K$D$$$F$O8=:_$G$b;H$C$F$$$k$N$G!$$=$N$X$s$N>pJs$O$$$^8x3+=`HwCf$G$9!%(B
-- 
Takekazu KATO
Intelligent System Lab.,
Dept. of Information Technology, Fac. of Engineering, Okayama University.
Tel: +81-86-251-8246
mailto:kato@chino.it.okayama-u.ac.jp
http://www.chino.it.okayama-u.ac.jp/~kato/
