|
webkit
2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
|
Generic fixed-point operations. More...
Go to the source code of this file.
Macros | |
| #define | MULT16_16SU(a, b) ((opus_val32)(opus_val16)(a)*(opus_val32)(opus_uint16)(b)) |
| #define | MULT16_32_Q16(a, b) ADD32(MULT16_16((a),SHR((b),16)), SHR(MULT16_16SU((a),((b)&0x0000ffff)),16)) |
| #define | MULT16_32_P16(a, b) ADD32(MULT16_16((a),SHR((b),16)), PSHR(MULT16_16SU((a),((b)&0x0000ffff)),16)) |
| #define | MULT16_32_Q15(a, b) ADD32(SHL(MULT16_16((a),SHR((b),16)),1), SHR(MULT16_16SU((a),((b)&0x0000ffff)),15)) |
| #define | MULT32_32_Q31(a, b) ADD32(ADD32(SHL(MULT16_16(SHR((a),16),SHR((b),16)),1), SHR(MULT16_16SU(SHR((a),16),((b)&0x0000ffff)),15)), SHR(MULT16_16SU(SHR((b),16),((a)&0x0000ffff)),15)) |
| #define | QCONST16(x, bits) ((opus_val16)(.5+(x)*(((opus_val32)1)<<(bits)))) |
| #define | QCONST32(x, bits) ((opus_val32)(.5+(x)*(((opus_val32)1)<<(bits)))) |
| #define | NEG16(x) (-(x)) |
| #define | NEG32(x) (-(x)) |
| #define | EXTRACT16(x) ((opus_val16)(x)) |
| #define | EXTEND32(x) ((opus_val32)(x)) |
| #define | SHR16(a, shift) ((a) >> (shift)) |
| #define | SHL16(a, shift) ((opus_int16)((opus_uint16)(a)<<(shift))) |
| #define | SHR32(a, shift) ((a) >> (shift)) |
| #define | SHL32(a, shift) ((opus_int32)((opus_uint32)(a)<<(shift))) |
| #define | PSHR32(a, shift) (SHR32((a)+((EXTEND32(1)<<((shift))>>1)),shift)) |
| #define | VSHR32(a, shift) (((shift)>0) ? SHR32(a, shift) : SHL32(a, -(shift))) |
| #define | SHR(a, shift) ((a) >> (shift)) |
| #define | SHL(a, shift) SHL32(a,shift) |
| #define | PSHR(a, shift) (SHR((a)+((EXTEND32(1)<<((shift))>>1)),shift)) |
| #define | SATURATE(x, a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) |
| #define | SATURATE16(x) (EXTRACT16((x)>32767 ? 32767 : (x)<-32768 ? -32768 : (x))) |
| #define | ROUND16(x, a) (EXTRACT16(PSHR32((x),(a)))) |
| #define | HALF16(x) (SHR16(x,1)) |
| #define | HALF32(x) (SHR32(x,1)) |
| #define | ADD16(a, b) ((opus_val16)((opus_val16)(a)+(opus_val16)(b))) |
| #define | SUB16(a, b) ((opus_val16)(a)-(opus_val16)(b)) |
| #define | ADD32(a, b) ((opus_val32)(a)+(opus_val32)(b)) |
| #define | SUB32(a, b) ((opus_val32)(a)-(opus_val32)(b)) |
| #define | MULT16_16_16(a, b) ((((opus_val16)(a))*((opus_val16)(b)))) |
| #define | MULT16_16(a, b) (((opus_val32)(opus_val16)(a))*((opus_val32)(opus_val16)(b))) |
| #define | MAC16_16(c, a, b) (ADD32((c),MULT16_16((a),(b)))) |
| #define | MAC16_32_Q15(c, a, b) ADD32((c),ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))) |
| #define | MAC16_32_Q16(c, a, b) ADD32((c),ADD32(MULT16_16((a),SHR((b),16)), SHR(MULT16_16SU((a),((b)&0x0000ffff)),16))) |
| #define | MULT16_16_Q11_32(a, b) (SHR(MULT16_16((a),(b)),11)) |
| #define | MULT16_16_Q11(a, b) (SHR(MULT16_16((a),(b)),11)) |
| #define | MULT16_16_Q13(a, b) (SHR(MULT16_16((a),(b)),13)) |
| #define | MULT16_16_Q14(a, b) (SHR(MULT16_16((a),(b)),14)) |
| #define | MULT16_16_Q15(a, b) (SHR(MULT16_16((a),(b)),15)) |
| #define | MULT16_16_P13(a, b) (SHR(ADD32(4096,MULT16_16((a),(b))),13)) |
| #define | MULT16_16_P14(a, b) (SHR(ADD32(8192,MULT16_16((a),(b))),14)) |
| #define | MULT16_16_P15(a, b) (SHR(ADD32(16384,MULT16_16((a),(b))),15)) |
| #define | DIV32_16(a, b) ((opus_val16)(((opus_val32)(a))/((opus_val16)(b)))) |
| #define | DIV32(a, b) (((opus_val32)(a))/((opus_val32)(b))) |
| #define | SIG2WORD16(x) (SIG2WORD16_generic(x)) |
Generic fixed-point operations.
| #define ADD16 | ( | a, | |
| b | |||
| ) | ((opus_val16)((opus_val16)(a)+(opus_val16)(b))) |
Add two 16-bit values
| #define ADD32 | ( | a, | |
| b | |||
| ) | ((opus_val32)(a)+(opus_val32)(b)) |
Add two 32-bit values
| #define DIV32 | ( | a, | |
| b | |||
| ) | (((opus_val32)(a))/((opus_val32)(b))) |
Divide a 32-bit value by a 32-bit value. Result fits in 32 bits
| #define DIV32_16 | ( | a, | |
| b | |||
| ) | ((opus_val16)(((opus_val32)(a))/((opus_val16)(b)))) |
Divide a 32-bit value by a 16-bit value. Result fits in 16 bits
| #define EXTEND32 | ( | x | ) | ((opus_val32)(x)) |
Change a 16-bit value into a 32-bit value
| #define EXTRACT16 | ( | x | ) | ((opus_val16)(x)) |
Change a 32-bit value into a 16-bit value. The value is assumed to fit in 16-bit, otherwise the result is undefined
16x16 multiply-add where the result fits in 32 bits
| #define MAC16_32_Q15 | ( | c, | |
| a, | |||
| b | |||
| ) | ADD32((c),ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))) |
16x32 multiply, followed by a 15-bit shift right and 32-bit add. b must fit in 31 bits. Result fits in 32 bits.
| #define MAC16_32_Q16 | ( | c, | |
| a, | |||
| b | |||
| ) | ADD32((c),ADD32(MULT16_16((a),SHR((b),16)), SHR(MULT16_16SU((a),((b)&0x0000ffff)),16))) |
16x32 multiplication, followed by a 16-bit shift right and 32-bit add. Results fits in 32 bits
| #define MULT16_16 | ( | a, | |
| b | |||
| ) | (((opus_val32)(opus_val16)(a))*((opus_val32)(opus_val16)(b))) |
16x16 multiplication where the result fits in 32 bits
| #define MULT16_16_16 | ( | a, | |
| b | |||
| ) | ((((opus_val16)(a))*((opus_val16)(b)))) |
16x16 multiplication where the result fits in 16 bits
| #define MULT16_16SU | ( | a, | |
| b | |||
| ) | ((opus_val32)(opus_val16)(a)*(opus_val32)(opus_uint16)(b)) |
Multiply a 16-bit signed value by a 16-bit unsigned value. The result is a 32-bit signed value
| #define MULT16_32_P16 | ( | a, | |
| b | |||
| ) | ADD32(MULT16_16((a),SHR((b),16)), PSHR(MULT16_16SU((a),((b)&0x0000ffff)),16)) |
16x32 multiplication, followed by a 16-bit shift right (round-to-nearest). Results fits in 32 bits
| #define MULT16_32_Q15 | ( | a, | |
| b | |||
| ) | ADD32(SHL(MULT16_16((a),SHR((b),16)),1), SHR(MULT16_16SU((a),((b)&0x0000ffff)),15)) |
16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits
| #define MULT16_32_Q16 | ( | a, | |
| b | |||
| ) | ADD32(MULT16_16((a),SHR((b),16)), SHR(MULT16_16SU((a),((b)&0x0000ffff)),16)) |
16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits
| #define MULT32_32_Q31 | ( | a, | |
| b | |||
| ) | ADD32(ADD32(SHL(MULT16_16(SHR((a),16),SHR((b),16)),1), SHR(MULT16_16SU(SHR((a),16),((b)&0x0000ffff)),15)), SHR(MULT16_16SU(SHR((b),16),((a)&0x0000ffff)),15)) |
32x32 multiplication, followed by a 31-bit shift right. Results fits in 32 bits
32-bit arithmetic shift right with rounding-to-nearest instead of rounding down
| #define QCONST16 | ( | x, | |
| bits | |||
| ) | ((opus_val16)(.5+(x)*(((opus_val32)1)<<(bits)))) |
Compile-time conversion of float constant to 16-bit value
| #define QCONST32 | ( | x, | |
| bits | |||
| ) | ((opus_val32)(.5+(x)*(((opus_val32)1)<<(bits)))) |
Compile-time conversion of float constant to 32-bit value
Shift by a and round-to-neareast 32-bit value. Result is a 16-bit value
| #define SHL16 | ( | a, | |
| shift | |||
| ) | ((opus_int16)((opus_uint16)(a)<<(shift))) |
Arithmetic shift-left of a 16-bit value
| #define SHL32 | ( | a, | |
| shift | |||
| ) | ((opus_int32)((opus_uint32)(a)<<(shift))) |
Arithmetic shift-left of a 32-bit value
"RAW" macros, should not be used outside of this header file
| #define SUB16 | ( | a, | |
| b | |||
| ) | ((opus_val16)(a)-(opus_val16)(b)) |
Subtract two 16-bit values
| #define SUB32 | ( | a, | |
| b | |||
| ) | ((opus_val32)(a)-(opus_val32)(b)) |
Subtract two 32-bit values
1.8.13