数値演算
asm.jsの最適化関数では、次の数値演算が利用できます。
多くの場合、演算をするたびに型は不明になります。
したがって、変数に保存する前に
変数の型を変換する'必要があります。
asm.jsでは、+(数値)はdouble変換を意味します。
また、intishの値は~~(数値)とするとsignedに変換できます。
比較演算のようにintを引数としてとれない場合は、|0などで型を変換する必要があります。
演算子 | 引数と戻り値 |
+(数値) | signed→double,unsigned→double,float→double,double→double |
-(数値) | int→intish,float→float,double→double |
~(数値) | intish→signed |
!(数値) | int→int |
(数値)+(数値) | int→intish,float?→floatish,double→double |
(数値)-(数値) | int→intish,float?→floatish,double→double |
(数値)*(数値) | float?→floatish,double→double |
(数値)/(数値) | signed→intish,unsigned→intish,float?→floatish,double→double |
(数値)%(数値) | signed→intish,unsigned→intish,double→double |
(数値)&(数値) | intish→signed |
(数値)|(数値) | intish→signed |
(数値)^(数値) | intish→signed |
(数値)<<(数値) | intish→signed |
(数値)>>(数値) | intish→signed |
(数値)>>>(数値) | intish→unsigned |
(数値)==(数値) | signed→int,unsigned→int,float→int,double→int |
(数値)!=(数値) | signed→int,unsigned→int,float→int,double→int |
(数値)<(数値) | signed→int,unsigned→int,float→int,double→int |
(数値)<=(数値) | signed→int,unsigned→int,float→int,double→int |
(数値)>(数値) | signed→int,unsigned→int,float→int,double→int |
(数値)>=(数値) | signed→int,unsigned→int,float→int,double→int |
ライブラリ関数
asm.jsの最適化関数では、次の数値演算用のライブラリ関数が利用できます。
これらの関数は、モジュール第1引数の標準ライブラリとして与える必要があります。
また、これら以外のライブラリ関数は、外部関数として扱う必要があります。
関数 | 引数と戻り値 | 内容 |
Math.cos | double?→double | 引数のcosを求めます。 |
Math.sin | double?→double | 引数のsinを求めます。 |
Math.tan | double?→double | 引数のtanを求めます。 |
Math.acos | double?→double | 引数のacosを求めます。 |
Math.asin | double?→double | 引数のasinを求めます。 |
Math.atan | double?→double | 引数のatanを求めます。 |
Math.atan2 | (double?,double?)→double | 原点と引数の点のなす角であるatan2()を求めます。 |
Math.exp | double?→double | eを引数乗した値を求めます。 |
Math.log | double?→double | 引数の対数を求めます。 |
Math.ceil | double?→double,float?->float | 引数以上で最小の整数を求めます。 |
Math.floor | double?→double,float?->float | 引数以下で最大の整数を求めます。 |
Math.sqrt | double?→double,float?->float | 引数の平方根を求めます。 |
Math.abs | signed→signed,double?→double,float?->float | 引数の絶対値を求めます。 |
Math.min | (int...)→int,(double...)→double | 最小値を求めます。 |
Math.max | (int...)→int,(double...)→double | 最大値を求めます。 |
Math.pow | (double?,double?)→double | 第1引数の第2引数乗を求めます。 |
Math.imul | (int,int)→signed | 32ビット整数の乗算値を求めます。 |
Math.fround | double→float | 引数をfloatに丸めた値を求めます。 |
Infinity | (なし)→double | 定数です。 |
NaN | (なし)→double | 定数です。 |
Math.E | (なし)→double | 数学で使われる定数です。 |
Math.LN10 | (なし)→double | 数学で使われる定数です。 |
Math.LN2 | (なし)→double | 数学で使われる定数です。 |
Math.LOG2E | (なし)→double | 数学で使われる定数です。 |
Math.LOG10E | (なし)→double | 数学で使われる定数です。 |
Math.PI | (なし)→double | 数学で使われる定数です。 |
Math.SQRT1_2 | (なし)→double | 数学で使われる定数です。 |
Math.SQRT2 | (なし)→double | 数学で使われる定数です。 |
型つき配列
asm.jsの最適化関数では、モジュール第3引数のメモリ配列を次のいずれかの配列に対応づけると、
配列データの読み書きができます。
配列データのアクセス時には、インデックスに右シフトをつけた形で(例えば、int32array[index>>2])呼び出す必要があります。
これら以外の型を使ったり、右シフトなしで配列にアクセスすると、
asm.jsの最適化関数ではなく、通常のJavascriptとして実行されます。
関数 | バイト数 | 右シフト数 | 読み込まれるデータの型 | 書き込み可能なデータ型 |
Uint8Array | 1 | 0 | intish | intish |
Int8Array | 1 | 0 | intish | intish |
Uint16Array | 2 | 1 | intish | intish |
Int16Array | 2 | 1 | intish | intish |
Uint32Array | 4 | 2 | intish | intish |
Int32Array | 4 | 2 | intish | intish |
Float32Array | 4 | 2 | float? | floatish,double? |
Float64Array | 8 | 3 | double? | float?,double? |