HP(゚∀゚) > NETA(´∀`)

MKVIPS
//最新版バイナリ
DOWNLOAD
//ソースコード
GOOGLESVN GITHUB
PSP-R4000専用_簡易アセンブラです,VFPUベクトル命令も一応対応。
ブランチやジャンプアドレスにC言語みたいな複数ラベルが使えます(下の例だとLBL)。
①入力フォームです、テキストファイルをドロップすると文字が読み込まれます
②出力フォームです、選択したモードで各こーどが出力されます、テキストファイルをドロップすると文字が読み込まれます
③サブルーチン開始アドレスを指定します(デフォルトは0x1000,※1)
④変換モードを選択します(CWC/PAR/PME/TEMP/CMF)。
⑤アセンブリを16進数コードに変換します
⑥アセンブリをTXTに保存します
⑦改造コードをアセンブリに変換します
⑧コードの_LMNを除去します
⑨コードをTXTで保存します

ASMパース無視行
コメント使用可能文字(ASM後に入力)
プログラムカウンター(PC)変更
レジスタの入力
即値数値の入力
ラベル定義
ブランチオフセット/ジャンプアドレスの入力
文字列定義
数値定義
擬似命令
対応命令
VFPU定数
三角関数角度指定

**ASMパース無視行**
(空欄) 空の行
_ 行頭が_
/ 行頭が/
FNC 行頭がFNC
LBL: 行末が:ラベル定義
label LBL ラベル定義のみ
setpc (アドレス) プログラムカウンター変更
**コメント使用可能文字(ASM後に入力)**
#コメント
;コメント
**プログラムカウンター(PC)変更**
setpc (アドレス) 指定したPCに変化します
**レジスタの入力(例;li ??,0)**
zr,zero 0番レジスタ
at 1番レジスタ
v0–v1 2–3番レジスタ
a0–a3 4–7番レジスタ
t0–t7 8–15番レジスタ
s0–s7 16–23番レジスタ
t8–t9 24–25番レジスタ
k0–k1 26–27番レジスタ
gp 28番レジスタ
sp 29番レジスタ
fp,s8 30番レジスタ
ra 31番レジスタ
$fpr0-31,$f0-31 浮動小数点レジスタ
S000-733 ベクターレジスタ
C000-7??,R000-7?? ベクターレジスタ(ペア、トリプル,クアッド、マトリックス表参照)
M000-722,E000-E722 ベクターレジスタ(2x2マトリックス)
M000-711,E000-E711 ベクターレジスタ(3x3マトリックス)
M000-700,E000-E700 ベクターレジスタ(4x4マトリックス)
**即値数値の入力(例;addiu t0,zr,???)**
10進数 1,-1
16進数 0x1,-0x1,$1,-$1
単精度浮動小数点+16bit右シフト 1.0f,-1.0f
半精度浮動小数点 1.0hf,-1.0hf
**ブランチオフセット/ジャンプアドレスの入力(例;beq ,t0,t0,???)**
符号あり10進数 +1,-1 コードPCと指定行数の差が計算されます
16進数 0x8801000,$8801000 コードPCと絶対アドレスの差が計算されます(※1)
文字列 LBL コードPCとラベルPCの差が計算されます
※1=0x8800000未満の数値の場合0x8800000が加算されます
**ラベル定義**
LBL: 行末が:
LBL: (ASM) 行間に:,ASMが混在
label LBL ラベル定義のみ
//半ラベル定義
upper_LBL ラベルPCの上位16BITを出力します。lui とかに使えます
lower_LBL ラベルPCの下位16BITを出力します。ori,lw とかに使えます
supper_LBL ラベルPC下位がマイナスの時,ラベルPCの上位16BITに+1して出力します
**文字列定義**
.string123 "変換対象文字列" 123=M$のコードページ番号(SJIS=932,UTF8=65001,UTF16LE=1200),""内の文字列が指定されたコードページ番号のバイト列に変換されてコード化されます。
文字終端にはかならず4バイトアラインNULLが入ります。 例;.string932 "あ"→0x00001000 0x0000A082 赤文字がアライン部分
**数値定義**
.word (0x16進数または10進数) INT数値が出力されます。RPNモード時はBITシフトなどを組み合わせることができます
.float FLOATARG FLOATARGが単精度浮動小数点に変換されて出力されます,詳細は下記参照
//FLOATARG詳細
1.123456 小数を入力
1/2 分数を入力
"pi", "π", "円周率", "goldenratio", "黄金比", "自然対数の底","e" は固定数値に変換。
(数学関数) M$の数学関数で変換対応,通常モードとRPNモード(+数式変換)の3種類あり
//通常モード時(関数1つのみ指定可能)
三角関数はラジアン角(π/2=90度)で指定してください。ラジアン以外を使いたい場合は以下のように記述して下さい。
度数(d);度,°,deg、DMSでも指定可能 例;tan(45度),tan(45°),tan(45deg),tan(45D0M00S),tan(45°0′00″)
HMS;時分秒で指定(DMSの1/15) 例;tan(3h0m0s),tan(3時0分0秒)
直角(r);R直角∟,ソニーVFPU基準 例;tan(0.5直角),tan(0.5R),tan(0.5∟)
グラード(g);gon grade グラード (∟/100) 例;tan(50gon),tan(50grade),tan(50グラード)
※逆三角関数(atan,atan2_)はdrgのどれかをつけるとラジアンから指定単位に変換して出力します。
通常モードの数学関数(atan2_,log,powは小数が2つ必要,例;pow(2,3) , log(2,10) , atan2_(1,sqrt3))
"tan", "tanh", "sin", "sinh", "cos", "cosh", "sqrt","xrt", "ln", "log", "exp", "pow", "atan", "asin", "acos", "atan2_"
"atand", "asind", "acosd","atan2_d","atanr", "asinr", "acosr","atan2_r"
"atang", "asing", "acosg","atan2_g"
//RPNモード時(複数式組み合わせ可能)
数式変換モードとRPNモードがあります。数式変換モード時は 1+2*3 とかの普通の式が使えます。
RPNは 1,2,3,*,+ と演算式を後述する記法です,RPNWIKI
RPNモード時関数のXY順番はスタック昇順がY,X,関数 の順(例; 3,2,pow →2^3=8)
スタック降順がX,Y,関数 の順(例; 2,3,pow →2^3=8)になります.
//スタック操作(生RPNモード時のみ)

swap XYを入れ替える
swap3 XYZを入れ替える
drop X,Y→Y ENTERの逆操作UNDO
//符号変換

chs 符号変換 +/-
abs 絶対値 |x|
//四則演算

加算
減算
* 乗算
/ 除算
//INTEGERモードのみの機能

BIN 2進数をINTに変換,BIN1111=0xF=15
OCT 8進数をINTに変換,OCT377=0xFF=255
>> 算術右シフト sra
>>> 論理右シフト srl
<< 論理左シフト sll
ror BIT右回転
rol BIT左回転
\ 余り mod
& 論理積 and
| 論理和 srl
^ 排他的論理積 xor
~ 否定 not
※ここから下はFLOATモード時のみ
//2引数が必要な関数

pow pow(x,y)=xのyべき乗 x^yまたは^
rpow rpow(x,y)=yのxべき乗 y^x
xrt xrt(x,y)=yのx乗根 pow(y,1/x)
yrt yrt(x,y)=xのy乗根 pow(x,1/y)
logx logx(x,y)=logx Y
logy logy(x,y)=logy X logms
hypot 斜辺の長さ √(x^2+y^2)
//逆三角関数 2引数必要 座標(x,y) 複素数平面 z= x+yi の場合
atan2_r アークタンジェント(直角) atan2_(x,y)
atan2_g アークタンジェント(グラード)
atan2_d アークタンジェント(度)
atan2_ アークタンジェント(ラジアン)
atan2ms_r アークタンジェント(直角) atan2ms_(y,x) ※yが先にくるので注意
atan2ms_g アークタンジェント(グラード)
atan2ms_d アークタンジェント(度)
atan2ms_ アークタンジェント(ラジアン)
atanh2_r ハイパボリックアークタンジェント(直角) atanh2_(x,y)
atanh2_g ハイパボリックアークタンジェント(グラード)
atanh2_d ハイパボリックアークタンジェント(度)
atanh2_ ハイパボリックアークタンジェント(ラジアン)
atanh2ms_r ハイパボリックアークタンジェント(直角) atanh2ms_(y,x) ※yが先にくるので注意
atanh2ms_g ハイパボリックアークタンジェント(グラード)
atanh2ms_d ハイパボリックアークタンジェント(度)
atanh2ms_ ハイパボリックアークタンジェント(ラジアン)
//3引数が必要な関数

dms>deg DMSを度に変換,dms>deg(X,Y,Z) dms>d
hms>h HMSを時間に変換,hms>h(X,Y,Z)
//角度変換
(角度省略版)
dms2deg DMSを度に変換,dms2deg(DD.MMSS) dms2d
hms2h HMSを時間に変換,hms2h(HH.MMSS)
hms2deg HMSを度に変換,hms2deg(HH.MMSS) hms2d
deg2rad 度をラジアンに変換 d2rad
deg2grad 度をグラードに変換 d2g
deg2r 度を直角に変換 d2r
rad2deg ラジアンを度に変換 rad2d
rad2grad ラジアンをグラードに変換 rad2g
rad2r ラジアンを直角に変換
grad2deg グラードを度に変換 g2d
grad2rad グラードをラジアンに変換 g2rad
grad2r グラードを直角に変換 g2r
r2deg 直角を度に変換 r2d
r2rad 直角をラジアンに変換
r2grad 直角をグラードに変換 r2g
//三角関数

acothd ハイパボリックアークコタンジェント(度) actanhd
acothr ハイパボリックアークコタンジェント(直角) actanhr
acothg ハイパボリックアークコタンジェント(グラード) actanhg
acoth ハイパボリックアークコタンジェント(ラジアン) actanh
acschd ハイパボリックアークコセカント(度)
acschr ハイパボリックアークコセカント(直角)
acschg ハイパボリックアークコセカント(グラード)
acsch ハイパボリックアークコセカント(ラジアン)
asechd ハイパボリックアークコセカント(度)
asechr ハイパボリックアークセカント(直角)
asechg ハイパボリックアークセカント(グラード)
asech ハイパボリックアークセカント(ラジアン)
atanhg ハイパボリックアークコタンジェント(グラード)
atanhd ハイパボリックアークタンジェント(度)
atanhr ハイパボリックアークタンジェント(直角)
atanh ハイパボリックアークタンジェント(ラジアン)
acoshg ハイパボリックアークコサイン(グラード)
acoshd ハイパボリックアークコサイン(度)
acoshr ハイパボリックアークコサイン(直角)
acosh ハイパボリックアークコサイン(ラジアン)
acoshng ハイパボリックアークコサイン(グラード) Xが負
acoshnd ハイパボリックアークコサイン(度)
acoshnr ハイパボリックアークコサイン(直角)
acoshn ハイパボリックアークコサイン(ラジアン)
asinhg ハイパボリックアークコサイン(グラード)
asinhd ハイパボリックアークサイン(度)
asinhr ハイパボリックアークサイン(直角)
asinh ハイパボリックアークサイン(ラジアン)
acotg アークコタンジェント(グラード) actang
acotd アークコタンジェント(度) actand
acotr アークコタンジェント(直角) actanr
acot アークコタンジェント(ラジアン) actan
asecg アークセカント(グラード)
asecd アークセカント(度)
asecr アークセカント(直角)
asec アークセカント(ラジアン)
acscg アークコセカント(グラード)
acscd アークコセカント(度)
acscr アークコセカント(直角)
acsc アークコセカント(ラジアン)
atang アークタンジェント(グラード)
atand アークタンジェント(度)
atanr アークタンジェント(直角)
atan アークタンジェント(ラジアン)
asing アークサイン(グラード)
asind アークサイン(度)
asinr アークサイン(直角)
asin アークサイン(ラジアン)
acosg アークコサイン(グラード)
acosd アークコサイン(度)
acosr アークコサイン(直角)
acos アークコサイン(ラジアン)
cothg ハイパボリックコタンジェント(グラード) ctanhg
cothd ハイパボリックコタンジェント(度) ctanhd
cothr ハイパボリックコタンジェント(直角) ctanhr
coth ハイパボリックコタンジェント(ラジアン) ctanh
cschg ハイパボリックコセカント(グラード)
cschd ハイパボリックコセカント(度)
cschr ハイパボリックコセカント(直角)
csch ハイパボリックコセカント(ラジアン)
sechg ハイパボリックセカント(グラード)
sechd ハイパボリックセカント(度)
sechr ハイパボリックセカント(直角)
sech ハイパボリックセカント(ラジアン)
tanhg ハイパボリックタンジェント(グラード)
tanhd ハイパボリックタンジェント(度)
tanhr ハイパボリックタンジェント(直角)
tanh ハイパボリックタンジェント(ラジアン)
coshg ハイパボリックコサイン(グラード)
coshd ハイパボリックコサイン(度)
coshr ハイパボリックコサイン(直角)
cosh ハイパボリックコサイン(ラジアン)
sinhg ハイパボリックサイン(グラード)
sinhd ハイパボリックサイン(度)
sinhr ハイパボリックサイン(直角)
sinh ハイパボリックサイン(ラジアン)
cotg コタンジェント(グラード) ctang
cotd コタンジェント(度) ctand
cotr コタンジェント(直角) ctanr
cot コタンジェント(ラジアン) ctan
cscg コセカント(グラード)
cscd コセカント(度)
cscr コセカント(直角)
csc コセカント(ラジアン)
secg セカント(グラード)
secd セカント(度)
secr セカント(直角)
sec セカント(ラジアン)
tang タンジェント(グラード)
tand タンジェント(度)
tanr タンジェント(直角)
tan タンジェント(ラジアン)
cosg コサイン(グラード)
cosd コサイン(度)
cosr コサイン(直角)
cos コサイン(ラジアン)
sing サイン(グラード)
sind サイン(度)
sinr サイン(直角)
sin サイン(ラジアン)
//べき乗,対数,逆数

sqrt 平方根
cbrt 立方根
loge loge X
log log10 X logten
ln loge X
logtwo log2 X
logthree log3 X
exp 自然対数の底eのべき乗
reci 逆数,1/x 1/x
**擬似命令**
la a0,label lui+oriラベル版
li a0,0x12345678 lui+ori即値版
mfloat t0,FLOATARG lui+ori FLOAT即値版(RPN対応)
//アライメント無視読込、保存
ulv.q lvl.q+lvr.q
usv.q svl.q+svr.q
ulw lwl+lwr
usw swl+swr
//ニセ3オペランド乗算
mul multumflo
mulu multu+mflo
//大小比較 (slt/sltu/slti/sltiu+beq/bne/beql/bnel,RD=$at)
bgt
blt
bgtu
bltu
bgti
blti
bgtiu
bltiu
bgtl
bltl
bgtul
bltul
bgtil
bltil
bgtiul
bltiul
bge
ble
bgeu
bleu
bgei
blei
bgeiu
bleiu
bgel
blel
bgeul
bleul
bgeil
bleil
bgeiul
bleiul
//.string代替命令
.ascii .string20127
.shift_jis .string932
.euc-jp .string51932
.uhc .string949
.euc-kr .string51949
.big5 .string950
.gbk .string936
.gb18030 .string54936
.utf-16be .string1201
.utf-16le .string1200
.utf-8 .string65001
//VFPU代替命令
vnrot.[sptq] Vd,Vs,[c,s,s,s] vrot.[sptq] Vd,Vs,[c,-s,-s,-s]
vouterp.t vcrs.t
vcdps.[sptq] vdet.[sptq]
vsum.[sptq] vfad.[sptq]
**対応命令**
a b c d e f g h i j k l m n o p q r s t u v w x y z
abs.s Fd,Fs

add Rd,Rs,Rt

add.s Fd,Fs,Ft

addi Rt,Rs,int16_imm

addiu Rt,Rs,int16_imm

addu Rd,Rs,Rt

and Rd,Rs,Rt

andi Rt,Rs,uint16_imm

b int16_offset

b int16_offset

bal int16_offset

bc1f int16_offset

bc1fl int16_offset

bc1t int16_offset

bc1tl int16_offset

beq Rs,Rt,int16_offset

beql Rs,Rt,int16_offset

beqz Rs,int16_offset

beqzl Rs,int16_offset

bgez Rs,int16_offset

bgezal Rs,int16_offset

bgezl Rs,int16_offset

bgtz Rs,int16_offset

bgtzl Rs,int16_offset

bitrev Rd,Rt

blez Rs,int16_offset

blezl Rs,int16_offset

bltz Rs,int16_offset

bltzal Rs,int16_offset

bltzall Rs,int16_offset

bltzl Rs,int16_offset

bne Rs,Rt,int16_offset

bnel Rs,Rt,int16_offset

bnez Rs,int16_offset

bnezl Rs,int16_offset

break code_for_break

bvf vfpu_condition_code,int16_offset

bvfl vfpu_condition_code,int16_offset

bvt vfpu_condition_code,int16_offset

bvtl vfpu_condition_code,int16_offset

c.eq.s Fs,Ft

c.f.s Fs,Ft

c.le.s Fs,Ft

c.lt.s Fs,Ft

c.nge.s Fs,Ft

c.ngl.s Fs,Ft

c.ngle.s Fs,Ft

c.ngt.s Fs,Ft

c.ole.s Fs,Ft

c.olt.s Fs,Ft

c.seq.s Fs,Ft

c.sf.s Fs,Ft

c.ueq.s Fs,Ft

c.ule.s Fs,Ft

c.ult.s Fs,Ft

c.un.s Fs,Ft

cache cache_function,int16_offset

ceil.w.s Fd,Fs

cfc0 Rt,general_cop

cfc1 Ft,general_cop

clo Rd,Rs

clz Rd,Rs

ctc0 Rt,general_cop

ctc1 Ft,general_cop

cvt.s.w Fd,Fs

cvt.w.s Fd,Fs

dbreak


div Rs,Rt

div.s Fd,Fs,Ft

divu Rs,Rt

dret


eret


ext Rt,Rs,SA,extract_size

floor.w.s Fd,Fs

halt


ins Rt,Rs,SA,insert_size

j int26_absolute_offset

jal int26_absolute_offset

jalr register_jump

jalr Rd,register_jump

jr register_jump

lb Rt,int16_offset

lbu Rt,int16_offset

lh Rt,int16_offset

lhu Rt,int16_offset

li Rt,int16_imm

li Rt,uint16_imm

ll Rt,int16_offset

lui Rt,uint16_imm

lv.q Vo_quad,vfpu_offset

lv.s Vo_scalar,vfpu_offset

lvl.q Vo_quad,vfpu_offset

lvr.q Vo_quad,vfpu_offset

lw Rt,int16_offset

lwc1 Ft,int16_offset

lwl Rt,int16_offset

lwr Rt,int16_offset

madd Rs,Rt

maddu Rs,Rt

max Rd,Rs,Rt

mfc0 Rt,cop0_register

mfc1 Ft,cop1_register

mfdr Rt,debug_register

mfhi Rd

mfic Rt,general_cop

mflo Rd

mfv Rt,Vd_scalar

mfvc Rt,cop2_register_d

mfvme Rt,int16_imm

min Rd,Rs,Rt

mov.s Fd,Fs

move Rd,Rs

move Rd,Rs

movn Rd,Rs,Rt

movz Rd,Rs,Rt

msub Rs,Rt

msubu Rs,Rt

mtc0 Rt,cop0_register

mtc1 Ft,cop1_register

mtdr Rt,debug_register

mthi Rs

mtic Rt,general_cop

mtlo Rs

mtv Rt,Vd_scalar

mtvc Rt,cop2_register_d

mtvme Rt,int16_imm

mul.s Fd,Fs,Ft

mult Rs,Rt

multu Rs,Rt

neg Rd,Rt

neg.s Fd,Fs

negu Rd,Rt

nop


nor Rd,Rs,Rt

not Rd,Rs

or Rd,Rs,Rt

ori Rt,Rs,uint16_imm

rotr Rd,Rt,SA

rotv Rd,Rt,Rs

round.w.s Fd,Fs

sb Rt,int16_offset

sc Rt, int16_offset

seb Rd,Rt

seh Rd,Rt

sh Rt,int16_offset

sll Rd,Rt,SA

sllv Rd,Rt,Rs

slt Rd,Rs,Rt

slti Rt,Rs,int16_imm

sltiu Rt,Rs,uint16_imm

sltu Rd,Rs,Rt

sqrt.s Fd,Fs

sra Rd,Rt,SA

srav Rd,Rt,Rs

srl Rd,Rt,SA

srlv Rd,Rt,Rs

sub Rd,Rs,Rt

sub.s Fd,Fs,Ft

subu Rd,Rs,Rt

sv.q Vo_quad,vfpu_offset
Verified
sv.s Vo_scalar,vfpu_offset
Verified
svl.q Vo_quad,vfpu_offset
Verified
svr.q Vo_quad,vfpu_offset
Verified
sw Rt,int16_offset

swc1 Ft,int16_offset

swl Rt,int16_offset

swr Rt,int16_offset

sync


syscall code_for_syscall

trunc.w.s Fd,Fs

vabs.p Vd_pair,Vs_pair f(x)=|x|,絶対値を返す Verified
vabs.q Vd_quad,Vs_quad

vabs.s Vd_scalar,Vs_scalar

vabs.t Vd_triple,Vs_triple

vadd.p Vd_pair,Vs_pair,Vt_pair Vd=Vs+Vt Verified
vadd.q Vd_quad,Vs_quad,Vt_quad

vadd.s Vd_scalar,Vs_scalar,Vt_scalar

vadd.t Vd_triple,Vs_triple,Vt_triple

vasin.p Vd_pair,Vs_pair f(x)=arcsin(x)*2/π,※角度注意 Verified
vasin.q Vd_quad,Vs_quad

vasin.s Vd_scalar,Vs_scalar

vasin.t Vd_triple,Vs_triple

vavg.p Vd_scalar,Vs_pair カラムかロウの平均値 Verified
vavg.q Vd_scalar,Vs_quad

vavg.t Vd_scalar,Vs_triple

vavg.s Vd_scalar,Vs_scalar ※スカラーだけ平均でなく0になる?
vbfy1.p Vd_pair,Vs_pair   for (i = 0; i < |q/p|; i += 2) {    vd[i+0] = vs[i+0] + vs[i+1];     vd[i+1] = vs[i+0] - vs[i+1]; }
vbfy1.q Vd_quad,Vs_quad

vbfy2.q Vd_quad,Vs_quad vd[0] = vs[0] + vs[2]; vd[1] = vs[1] + vs[3]; vd[2] = vs[0] - vs[2]; vd[3] = vs[1] - vs[3];
vcmovf.p Vd_pair,Vs_pair,vfpu_imm_3bit

vcmovf.q Vd_quad,Vs_quad,vfpu_imm_3bit

vcmovf.s Vd_scalar,Vs_scalar,vfpu_imm_3bit

vcmovf.t Vd_triple,Vs_triple,vfpu_imm_3bit

vcmovt.p Vd_pair,Vs_pair,vfpu_imm_3bit

vcmovt.q Vd_quad,Vs_quad,vfpu_imm_3bit

vcmovt.s Vd_scalar,Vs_scalar,vfpu_imm_3bit

vcmovt.t Vd_triple,Vs_triple,vfpu_imm_3bit

vcmp.p vfpu_condition_name,Vs_pair,Vt_pair

vcmp.p vfpu_condition_name,Vs_pair

vcmp.p vfpu_condition_name

vcmp.q vfpu_condition_name,Vs_quad,Vt_quad

vcmp.q vfpu_condition_name,Vs_quad

vcmp.q vfpu_condition_name

vcmp.s vfpu_condition_name,Vs_scalar,Vt_scalar

vcmp.s vfpu_condition_name,Vs_scalar

vcmp.s vfpu_condition_name

vcmp.t vfpu_condition_name,Vs_triple,Vt_triple

vcmp.t vfpu_condition_name,Vs_triple

vcmp.t vfpu_condition_name

vcos.p Vd_pair,Vs_pair f(x)=cos(x*π/2),※角度注意 Verified
vcos.q Vd_quad,Vs_quad

vcos.s Vd_scalar,Vs_scalar

vcos.t Vd_triple,Vs_triple

vcrs.t Vd_triple,Vs_triple,Vt_triple vd[0] = vs[1] * vt[2]; vd[1] = vs[2] * vt[0]; vd[2] = vs[0] * vt[1]; 直積 Verified
vcrsp.t Vd_triple,Vs_triple,Vt_triple vd[0] = vs[1]*vt[2] - vs[2]*vt[1];   vd[1] = vs[2]*vt[0] - vs[0]*vt[2];   vd[2] = vs[0]*vt[1] – vs[1]*vt[0];
外積/クロス積
Verified
vcst.p Vd_pair,vfpu_const VFPU内蔵の定数を呼び出す,※定数表 Verified
vcst.q Vd_quad,vfpu_const

vcst.s Vd_scalar,vfpu_const

vcst.t Vd_triple,vfpu_const

vdet.p Vd_scalar,Vs_pair,Vt_pair vd.s = vs[0] * vt[1] - vs[1] * vt[0]; #行列式ad-bc, 2D外積/クロス積の大きさ VsXVt|=|Vs||Vt|sinθ Verified
vdet.q Vd_scalar,Vs_quad,Vt_quad vd.s = vs[0] * vt[1] - vs[1] * vt[0] +vs[2]*vt[2] +vs[3]*vt[3] Verified
vdet.t Vd_scalar,Vs_triple,Vt_triple vd.s = vs[0] * vt[1] - vs[1] * vt[0] +vs[2]*vt[2] Verified
vdet.s Vd_scalar,Vs_scaler,Vt_scalar ※スカラーの場合は0 Verified
vdiv.p Vd_pair,Vs_pair,Vt_pair Vd=Vs/Vt Verified
vdiv.q Vd_quad,Vs_quad,Vt_quad

vdiv.s Vd_scalar,Vs_scalar,Vt_scalar

vdiv.t Vd_triple,Vs_triple,Vt_triple

vdot.p Vd_scalar,Vs_pair,Vt_pair Vd=Vs・Vt,内積/ドット積 |Vs||Vt|cosθ Verified
vdot.q Vd_scalar,Vs_quad,Vt_quad sd.s = 0; for (i = 0; i < |q/t/p/s|; ++i)
vdot.s Vd_scalar,Vs_scalar,Vt_scalar sd.s += vs[i] * vt[i];
vdot.t Vd_scalar,Vs_triple,Vt_triple

vexp2.p Vd_pair,Vs_pair f(x)=2^x Verified
vexp2.q Vd_quad,Vs_quad

vexp2.s Vd_scalar,Vs_scalar

vexp2.t Vd_triple,Vs_triple

vf2h.p Vd_scalar,Vs_pair 単精度浮動小数点数を半精度浮動小数点に変換 0xHALFHALF Verified
vf2h.q Vd_pair,Vs_quad 0xHALFHALF 0xHALFHALF
vf2h.s Vd_scalar,Vs_scalar ※16BIT以上は0が入る 0x0000HALF
vf2h.t Vd_pair,Vs_quad ※16BIT以上は0が入る 0xHALFHALF 0x0000HALF
vf2id.p Vd_pair,Vs_pair,vfpu_imm_5bit

vf2id.q Vd_quad,Vs_quad,vfpu_imm_5bit

vf2id.s Vd_scalar,Vs_scalar,vfpu_imm_5bit

vf2id.t Vd_triple,Vs_triple,vfpu_imm_5bit

vf2in.p Vd_pair,Vs_pair,vfpu_imm_5bit

vf2in.q Vd_quad,Vs_quad,vfpu_imm_5bit

vf2in.s Vd_scalar,Vs_scalar,vfpu_imm_5bit

vf2in.t Vd_triple,Vs_triple,vfpu_imm_5bit

vf2iu.p Vd_pair,Vs_pair,vfpu_imm_5bit

vf2iu.q Vd_quad,Vs_quad,vfpu_imm_5bit

vf2iu.s Vd_scalar,Vs_scalar,vfpu_imm_5bit

vf2iu.t Vd_triple,Vs_triple,vfpu_imm_5bit

vf2iz.p Vd_pair,Vs_pair,vfpu_imm_5bit 単精度浮動小数点数をINT32に変換
vf2iz.q Vd_quad,Vs_quad,vfpu_imm_5bit

vf2iz.s Vd_scalar,Vs_scalar,vfpu_imm_5bit

vf2iz.t Vd_triple,Vs_triple,vfpu_imm_5bit

vfad.p Vd_scalar,Vs_pair カラムかロウのΣ,SUM Verified
vfad.q Vd_scalar,Vs_quad

vfad.t Vd_scalar,Vs_triple

vfad.s Vd_scalar,Vs_scalar

vfim.s Vt_scalar,binary16 Vt=半精度浮動小数点 即値 Verified
vflush


vh2f.p Vd_quad,Vs_pair 半精度浮動小数点を単精度浮動小数点数に変換 Verified
vh2f.s Vd_pair,Vs_scalar

vh2f.t Vd_quad,Vs_pair

vh2f.q Vd_quad,Vs_pair

vhdp.p Vd_scalar,Vs_pair,Vt_pair vd.s = vt[|q/t/p|]; #内積にVtを追加
vhdp.q Vd_scalar,Vs_quad,Vt_quad   for (i = 0; i < |q/t/p|-1; ++i)
vhdp.t Vd_scalar,Vs_triple,Vt_triple     vd.s += vs[i] * vt[i];
vhtfm2.p Vd_pair,Vs_matrix_pair,Vt_pair

vhtfm3.t Vd_triple,Vs_matrix_triple,Vt_triple

vhtfm4.q Vd_quad,Vs_matrix_quad,Vt_quad

vi2c.q Vd_scalar,Vs_quad

vi2f.p Vd_pair,Vs_pair,vfpu_imm_5bit

vi2f.q Vd_quad,Vs_quad,vfpu_imm_5bit

vi2f.s Vd_scalar,Vs_scalar,vfpu_imm_5bit

vi2f.t Vd_triple,Vs_triple,vfpu_imm_5bit

vi2s.p Vd_scalar,Vs_pair vd=Vs>>16 int32をint16に変換 Verified
vi2s.q Vd_pair,Vs_quad

vi2s.s Vd_scalar,Vs_scalar

vi2s.t Vd_pair,Vs_quad

vi2uc.q Vd_scalar,Vs_quad

vi2us.p Vd_scalar,Vs_pair vd=Vs>>15 ?? 0x80000000があるときは0になる
vi2us.q Vd_pair,Vs_quad

vi2us.s Vd_scalar,Vs_scalar

vi2us.t Vd_pair,Vs_quad

vidt.p Vd_pair

vidt.q Vd_quad

viim.s Vt_scalar,vfpu_int16_imm Vt=INT即値をFLOATに変換 Verified
vlgb.s Vd_scalar,Vs_scalar sd = ss.e – 127 、単精度浮動小数点数の指数 Verified
vlog2.p Vd_pair,Vs_pair f(x)=log2(x) Verified
vlog2.q Vd_quad,Vs_quad

vlog2.s Vd_scalar,Vs_scalar

vlog2.t Vd_triple,Vs_triple

vmax.p Vd_pair,Vs_pair,Vt_pair

vmax.q Vd_quad,Vs_quad,Vt_quad

vmax.s Vd_scalar,Vs_scalar,Vt_scalar

vmax.t Vd_triple,Vs_triple,Vt_triple

vmfvc Vd_scalar,cop2_register_s

vmidt.p Vd_matrix_pair

vmidt.q Vd_matrix_quad

vmidt.t Vd_matrix_triple

vmin.p Vd_pair,Vs_pair,Vt_pair

vmin.q Vd_quad,Vs_quad,Vt_quad

vmin.s Vd_scalar,Vs_scalar,Vt_scalar

vmin.t Vd_triple,Vs_triple,Vt_triple

vmmov.p Vd_matrix_pair,Vs_matrix_pair 該当マトリックステーブルに転送
vmmov.q Vd_matrix_quad,Vs_matrix_quad

vmmov.t Vd_matrix_triple,Vs_matrix_triple

vmmul.p Vd_matrix_pair,Vs_matrix_pair,Vt_matrix_pair for (i = 0; i < |q/t/p|; ++i){ for (j = 0; j < |q/t/p|; ++j){ //マトリックス乗算
vmmul.q Vd_matrix_quad,Vs_matrix_quad,Vt_matrix_quad md[i][j] = 0; for (k = 0; k < |q/t/p|; ++k){ md[i][j] += ms[i][k] * mt[k][j];
vmmul.t Vd_matrix_triple,Vs_matrix_triple,Vt_matrix_triple }}}
vmone.p Vd_matrix_pair 該当マトリックステーブル内の値をすべて1にする Verified
vmone.q Vd_matrix_quad

vmone.t Vd_matrix_triple

vmov.p Vd_pair,Vs_pair カラムかロウの転送
vmov.q Vd_quad,Vs_quad

vmov.s Vd_scalar,Vs_scalar

vmov.t Vd_triple,Vs_triple

vmscl.p Vd_matrix_pair,Vs_matrix_pair,Vt_scalar マトリックスのスカラー倍
vmscl.q Vd_matrix_quad,Vs_matrix_quad,Vt_scalar

vmscl.t Vd_matrix_triple,Vs_matrix_triple,Vt_scalar

vmtvc cop2_register_d,Vs_scalar

vmul.p Vd_pair,Vs_pair,Vt_pair Vd=Vs*Vt Verified
vmul.q Vd_quad,Vs_quad,Vt_quad

vmul.s Vd_scalar,Vs_scalar,Vt_scalar

vmul.t Vd_triple,Vs_triple,Vt_triple

vmzero.p Vd_matrix_pair 該当マトリックステーブル内の値をすべて0にする Verified
vmzero.q Vd_matrix_quad

vmzero.t Vd_matrix_triple

vnasin.p Vd_pair,Vs_pair f(x)=arcsin(-x)*2/π,※角度注意 Verified
vnasin.q Vd_quad,Vs_quad

vnasin.s Vd_scalar,Vs_scalar

vnasin.t Vd_triple,Vs_triple

vncos.p Vd_pair,Vs_pair f(x)=cos(-x*π/2),※角度注意 Verified
vncos.q Vd_quad,Vs_quad

vncos.s Vd_scalar,Vs_scalar

vncos.t Vd_triple,Vs_triple

vneg.p Vd_pair,Vs_pair f(x)=-x Verified
vneg.q Vd_quad,Vs_quad

vneg.s Vd_scalar,Vs_scalar

vneg.t Vd_triple,Vs_triple

vnlog2.p Vd_pair,Vs_pair f(x)=log2(-x) Verified
vnlog2.q Vd_quad,Vs_quad

vnlog2.s Vd_scalar,Vs_scalar

vnlog2.t Vd_triple,Vs_triple

vnop


vnrcp.p Vd_pair,Vs_pair f(x)=1/(-x) Verified
vnrcp.q Vd_quad,Vs_quad

vnrcp.s Vd_scalar,Vs_scalar

vnrcp.t Vd_triple,Vs_triple

vnrsq.p Vd_pair,Vs_pair f(x)=1/(√-x) Verified
vnrsq.q Vd_quad,Vs_quad

vnrsq.s Vd_scalar,Vs_scalar

vnrsq.t Vd_triple,Vs_triple

vnsin.p Vd_pair,Vs_pair f(x)=sin(-x*π/2)※角度注意 Verified
vnsin.q Vd_quad,Vs_quad

vnsin.s Vd_scalar,Vs_scalar

vnsin.t Vd_triple,Vs_triple

vocp.p Vd_pair,Vs_pair vd[i]=1-vs[i] Verified
vocp.q Vd_quad,Vs_quad

vocp.s Vd_scalar,Vs_scalar

vocp.t Vd_triple,Vs_triple

vone.p Vd_pair f(x)=1 Verified
vone.q Vd_quad

vone.s Vd_scalar

vone.t Vd_triple

vpfxd [vfpu_prefix4,vfpu_prefix5,vfpu_prefix6,vfpu_prefix7] Vd用のプリフィックス ※プリフィックス詳細
vpfxs [vfpu_prefix0,vfpu_prefix1,vfpu_prefix2,vfpu_prefix3] Vs用のプリフィックス ※プリフィックス詳細
vpfxt [vfpu_prefix0,vfpu_prefix1,vfpu_prefix2,vfpu_prefix3] Vt用のプリフィックス ※プリフィックス詳細
vqmul.q Vd_quad,Vs_quad,Vt_quad vd[0] = vs[3] * vt[0] + vs[0] * vt[3] + vs[1] * vt[2] - vs[2] * vt[1];
vd[1] = vs[3] * vt[1] + vs[1] * vt[3] + vs[2] * vt[0] - vs[0] * vt[2];
vd[2] = vs[3] * vt[2] + vs[2] * vt[3] + vs[0] * vt[1] - vs[1] * vt[0];
vd[3] = vs[3] * vt[3] - vs[0] * vt[0] - vs[1] * vt[1] - vs[2] * vt[2];

vrcp.p Vd_pair,Vs_pair f(x)=1/x Verified
vrcp.q Vd_quad,Vs_quad

vrcp.s Vd_scalar,Vs_scalar

vrcp.t Vd_triple,Vs_triple

vrexp2.p Vd_pair,Vs_pair f(x)=2^(-x) Verified
vrexp2.q Vd_quad,Vs_quad

vrexp2.s Vd_scalar,Vs_scalar

vrexp2.t Vd_triple,Vs_triple

vrndf1.p Vd_pair 0.0 <= vd[i] < 2.0  ランダムな単精度浮動小数点数
vrndf1.q Vd_quad

vrndf1.s Vd_scalar

vrndf1.t Vd_triple

vrndf2.p Vd_pair 0.0 <= vd[i] < 4.0 ランダムな単精度浮動小数点数
vrndf2.q Vd_quad

vrndf2.s Vd_scalar

vrndf2.t Vd_triple

vrndi.p Vd_pair ランダムなINT32
vrndi.q Vd_quad

vrndi.s Vd_scalar

vrndi.t Vd_triple

vrnds.s Vs_scalar SEED有りのランダム値
vrot.p Vd_pair,Vs_scalar,vfpu_rotator θ=Vs(※直角単位)*π/2での単位円上の座標 cos(θ),sin(θ),sin(-θ),0のどれか ※角度注意 Verified
vrot.q Vd_quad,Vs_scalar,vfpu_rotator

vrot.s Vd_scalar,Vs_scalar,vfpu_rotator

vrot.t Vd_triple,Vs_scalar,vfpu_rotator

vrsq.p Vd_pair,Vs_pair f(x)=1/(√x) Verified
vrsq.q Vd_quad,Vs_quad

vrsq.s Vd_scalar,Vs_scalar

vrsq.t Vd_triple,Vs_triple

vs2i.p Vd_quad,Vs_pair Int16をint32に変換
vs2i.s Vd_pair,Vs_scalar vd.p[0] = (vs.s[0](16..31)) << 16; vd.p[1] = (vs.s[0]( 0..15)) << 16;
vsat0.p Vd_pair,Vs_pair x<0のときy=0,x>=1の時y=1,0<=x<1の時 y=x Verified
vsat0.q Vd_quad,Vs_quad

vsat0.s Vd_scalar,Vs_scalar

vsat0.t Vd_triple,Vs_triple

vsat1.p Vd_pair,Vs_pair x<-1のときy=-1,x>=1の時y=1,-1<=x<1の時 y=x Verified
vsat1.q Vd_quad,Vs_quad

vsat1.s Vd_scalar,Vs_scalar

vsat1.t Vd_triple,Vs_triple

vsbn.s Vd_scalar,Vs_scalar,Vt_scalar sd = (-1)^(ss.s) x 2^N x (1 + ??)
vsbz.s Vd_scalar,Vs_scalar sd = (-1)^(ss.s) x 2^0 x (1 + ??).
vscl.p Vd_pair,Vs_pair,Vt_scalar vd[i] = vs[i] * vt.s; Verified
vscl.q Vd_quad,Vs_quad,Vt_scalar

vscl.s Vd_scalar,Vs_scalar,Vt_scalar

vscl.t Vd_triple,Vs_triple,Vt_scalar

vscmp.p Vd_pair,Vs_pair,Vt_pair

vscmp.q Vd_quad,Vs_quad,Vt_quad

vscmp.s Vd_scalar,Vs_scalar,Vt_scalar

vscmp.t Vd_triple,Vs_triple,Vt_triple

vsge.p Vd_pair,Vs_pair,Vt_pair vsltの逆 vs>=vt
vsge.q Vd_quad,Vs_quad,Vt_quad

vsge.s Vd_scalar,Vs_scalar,Vt_scalar

vsge.t Vd_triple,Vs_triple,Vt_triple

vsgn.p Vd_pair,Vs_pair

vsgn.q Vd_quad,Vs_quad

vsgn.s Vd_scalar,Vs_scalar

vsgn.t Vd_triple,Vs_triple

vsin.p Vd_pair,Vs_pair f(x)=sin(x*π/2),※角度注意 Verified
vsin.q Vd_quad,Vs_quad

vsin.s Vd_scalar,Vs_scalar

vsin.t Vd_triple,Vs_triple

vslt.p Vd_pair,Vs_pair,Vt_pair SltのVFPU版
vslt.q Vd_quad,Vs_quad,Vt_quad

vslt.s Vd_scalar,Vs_scalar,Vt_scalar

vslt.t Vd_triple,Vs_triple,Vt_triple

vsocp.p Vd_quad,Vs_pair  vd[i*2+0] = 1.0 - vs[i];    vd[i*2+1] = vs[i];
vsocp.s Vd_pair,Vs_scalar

vsqrt.p Vd_pair,Vs_pair f(x)=√x Verified
vsqrt.q Vd_quad,Vs_quad

vsqrt.s Vd_scalar,Vs_scalar

vsqrt.t Vd_triple,Vs_triple

vsrt1.q Vd_quad,Vs_quad

vsrt2.q Vd_quad,Vs_quad

vsrt3.q Vd_quad,Vs_quad

vsrt4.q Vd_quad,Vs_quad

vsub.p Vd_pair,Vs_pair,Vt_pair Vs=Vs-Vt Verified
vsub.q Vd_quad,Vs_quad,Vt_quad

vsub.s Vd_scalar,Vs_scalar,Vt_scalar

vsub.t Vd_triple,Vs_triple,Vt_triple

vsync uint16_imm

vt4444.q Vd_quad,Vs_quad RGB色モードの変更
vt5551.q Vd_quad,Vs_quad RGB色モードの変更
vt5650.q Vd_quad,Vs_quad RGB色モードの変更
vtfm2.p Vd_pair,Vs_matrix_pair,Vt_pair

vtfm3.t Vd_triple,Vs_matrix_triple,Vt_triple

vtfm4.q Vd_quad,Vs_matrix_quad,Vt_quad

vus2i.p Vd_quad,Vs_pair Uint16をint32に変換
vus2i.s Vd_pair,Vs_scalar

vwb.q Vo_quad,vfpu_offset

vwbn.s Vd_scalar,Vt_scalar,uint16_imm sd = (-1)^(ss.s) x 2^(N-127) x (1 + ??) N=IMM,指数と仮数を指定して単精度浮動小数点数に変換
vzero.p Vd_pair Vd=0 Verified
vzero.q Vd_quad

vzero.s Vd_scalar

vzero.t Vd_triple

v??? 0x61800000 未判明命令
v??? 0x62000000

v??? 0x62800000

v??? 0x63000000

v??? 0x65800000

v??? 0x67800000

v??? 0x68800000

v??? 0x69000000

v??? 0x69800000

v??? 0x6A000000

v??? 0x6A800000

v??? 0x6B000000

v??? 0x6B800000

v??? 0x6E000000

v??? 0xD0080000

v??? 0xD0090000

v??? 0xD00B0000

v??? 0xD00C0000

v??? 0xD00D0000

v??? 0xD00E0000

v??? 0xD00F0000

v??? 0xD0240000

v??? 0xD0250000

v??? 0xD0260000

v??? 0xD0270000

v??? 0xD0280000

v??? 0xD0290000

v??? 0xD02A0000

v??? 0xD02B0000

v??? 0xD02C0000

v??? 0xD02D0000

v??? 0xD02E0000

v??? 0xD02F0000

v??? 0xD0300000

v??? 0xD0310000

v??? 0xD0380000 INT32をバイトに分解して<<24??
v??? 0xD0390000

v??? 0xD04B0000

v??? 0xD04C0000

v??? 0xD04D0000

v??? 0xD04E0000

v??? 0xD04F0000

v??? 0xD05C0000

v??? 0xD05D0000

v??? 0xD05E0000

v??? 0xD05F0000

v??? 0xF300????

v??? 0xF381????

v??? 0xF382????

v??? 0xF384????

v??? 0xF385????

v??? 0xF388????

v??? 0xF389????

v??? 0xF38A????

v??? 0xF38B????

v??? 0xF38C????

v??? 0xF38D????

v??? 0xF38E????

v??? 0xF38F????

v??? 0xF3C0????

v??? 0xF3D0????

v??? 0xF3E0????

v??? 0xF3F0????

v??? 0xFC00????

wsbh Rd,Rt

wsbw Rd,Rt

xor Rd,Rs,Rt

xori Rt,Rs,uint16_imm

a b c d e f g h i j k l m n o p q r s t u v w x y z

FXWORLD_VFPUサイクル表

//VECTORプリフィックス
//vpfxs,vpfxt
備考
x vs[0] Vpfxtの時はvt[0]
y vs[1]
z vs[2]
w vs[3]
-x -vs[0] 符号変換
-y -vs[1]
-z -vs[2]
-w -vs[3]
|x| |vs[0]| 絶対値
|y| |vs[1]|
|z| |vs[2]|
|w| |vs[3]|
-|x| -|vs[0]| 負の絶対値
-|y| -|vs[1]|
-|z| -|vs[2]|
-|w| -|vs[3]|
0 定数 0
1 定数 1 直角(SONY関数用)
2 定数 2 180度
1/2 定数 1/2 45度
3 定数 3 270度
1/3 定数 1/3 30度
1/4 定数 1/4 22.5度
1/6 定数 1/6 15度
-0 定数 -0
-1 定数 -1 -直角(SONY関数用)
-2 定数 -2 -180度
-1/2 定数 -1/2 -45度
-3 定数 -3 -270度
-1/3 定数 -1/3 -30度
-1/4 定数 -1/4 -22.5度
-1/6 定数 -1/6 -15度



//vpfxd

[0:1] 0<=y<=1 0~1範囲の値に丸められる
[-1:1] -1<=y<=1 -1~1範囲の値に丸められる
m ??? 不明

//$ONY定数表
No. ASM対応文字 だいたいの値 備考
0 n/a 0
1 HUGE 340282346638529000000000000000000000000
2 SQRT(2) 1.41421 √2,一夜一夜ひとみごろ
3 1/SQRT(2) 0.70711 1÷√2,cos(π/4),sin(π/4)
4 2/SQRT(PI) 1.12838 2/√π
5 2/PI 0.63662 2÷π,ラジアンを直角単位に変換
6 1/PI 0.31831 1÷π
7 PI/4 0.7854 45度,単位円の1/8周
8 PI/2 1.5708 90度,直角単位をラジアンに変換,単位円の1/4周
9 PI 3.14159 180度,単位円の半周,単位円の面積
10 E 2.71828 自然対数の底
11 LOG2E 1.4427 log2(e)
12 LOG10E 0.43429 log10(e)
13 LN2 0.69315 loge(2)
14 LN10 2.30259 loge(10)
15 2*PI 6.28319 2×π,360度,単位円の全周
16 PI/6 0.5236 30度,単位円の1/12周
17 LOG10TWO 0.30103 Log10(2)
18 LOG2TEN 3.32193 Log2(10)
19 SQRT(3)/2 0.86603 √3÷2,cos(π/6),sin(π/3)

#sin/cos関数引数,$ONYの特殊度数(直角単位)になります。逆三角関数も直角単位で返されます。
度数ラジアン$ONY角(度数÷90,rad*2/π)$ONY丸め数値
0000
15Π/121/60.1666666667
30Π/61/30.3333333333
45Π/41/20.5
60Π/32/30.6666666667
755π/125/60.8333333333
90Π/211
1057π/127/61.1666666667
1202π/34/31.3333333333
1353π/43/21.5
1505π/65/31.6666666667
16511π/1211/61.8333333333
180π22
0000
-15-Π/12-1/6-0.1666666667
-30-Π/6-1/3-0.3333333333
-45-Π/4-1/2-0.5
-60-Π/3-2/3-0.6666666667
-75-5π/12-5/6-0.8333333333
-90-Π/2-1-1
-105-7π/12-7/6-1.1666666667
-120-2π/3-4/3-1.3333333333
-135-3π/4-3/2-1.5
-150-5π/6-5/3-1.6666666667
-165-11π/12-11/6-1.8333333333
-180-2-2
HP(゚∀゚) > NETA(´∀`)
  プロフィール  PR:無料HP  高梁自動車学校  借入 打開  Webデザイン 専門学校  ザックス  中古ホイール 熊本  タイヤ 価格  自動車整備 夜間  中古 ホイール  パワーストーンの販売  こども 大学  トリプルエー投資顧問 口コミ  エンケイ rsv  名簿屋