|
|
|
@ -47,39 +47,39 @@ namespace glm { |
|
|
|
|
static float32x4_t copy_lane(float32x4_t vdst, int dlane, float32x4_t vsrc, int slane) { |
|
|
|
|
#if GLM_ARCH & GLM_ARCH_ARMV8_BIT |
|
|
|
|
switch(dlane) { |
|
|
|
|
case 0: |
|
|
|
|
case 0: |
|
|
|
|
switch(slane) { |
|
|
|
|
case 0: return vcopyq_laneq_f32(vdst, 0, vsrc, 0); |
|
|
|
|
case 1: return vcopyq_laneq_f32(vdst, 0, vsrc, 1); |
|
|
|
|
case 2: return vcopyq_laneq_f32(vdst, 0, vsrc, 2); |
|
|
|
|
case 3: return vcopyq_laneq_f32(vdst, 0, vsrc, 3); |
|
|
|
|
} |
|
|
|
|
assert(!"Unreachable code executed!"); |
|
|
|
|
case 1: |
|
|
|
|
case 0: return vcopyq_laneq_f32(vdst, 0, vsrc, 0); |
|
|
|
|
case 1: return vcopyq_laneq_f32(vdst, 0, vsrc, 1); |
|
|
|
|
case 2: return vcopyq_laneq_f32(vdst, 0, vsrc, 2); |
|
|
|
|
case 3: return vcopyq_laneq_f32(vdst, 0, vsrc, 3); |
|
|
|
|
} |
|
|
|
|
assert(!"Unreachable code executed!"); |
|
|
|
|
case 1: |
|
|
|
|
switch(slane) { |
|
|
|
|
case 0: return vcopyq_laneq_f32(vdst, 1, vsrc, 0); |
|
|
|
|
case 1: return vcopyq_laneq_f32(vdst, 1, vsrc, 1); |
|
|
|
|
case 2: return vcopyq_laneq_f32(vdst, 1, vsrc, 2); |
|
|
|
|
case 3: return vcopyq_laneq_f32(vdst, 1, vsrc, 3); |
|
|
|
|
} |
|
|
|
|
assert(!"Unreachable code executed!"); |
|
|
|
|
case 2: |
|
|
|
|
case 0: return vcopyq_laneq_f32(vdst, 1, vsrc, 0); |
|
|
|
|
case 1: return vcopyq_laneq_f32(vdst, 1, vsrc, 1); |
|
|
|
|
case 2: return vcopyq_laneq_f32(vdst, 1, vsrc, 2); |
|
|
|
|
case 3: return vcopyq_laneq_f32(vdst, 1, vsrc, 3); |
|
|
|
|
} |
|
|
|
|
assert(!"Unreachable code executed!"); |
|
|
|
|
case 2: |
|
|
|
|
switch(slane) { |
|
|
|
|
case 0: return vcopyq_laneq_f32(vdst, 2, vsrc, 0); |
|
|
|
|
case 1: return vcopyq_laneq_f32(vdst, 2, vsrc, 1); |
|
|
|
|
case 2: return vcopyq_laneq_f32(vdst, 2, vsrc, 2); |
|
|
|
|
case 3: return vcopyq_laneq_f32(vdst, 2, vsrc, 3); |
|
|
|
|
} |
|
|
|
|
assert(!"Unreachable code executed!"); |
|
|
|
|
case 3: |
|
|
|
|
case 0: return vcopyq_laneq_f32(vdst, 2, vsrc, 0); |
|
|
|
|
case 1: return vcopyq_laneq_f32(vdst, 2, vsrc, 1); |
|
|
|
|
case 2: return vcopyq_laneq_f32(vdst, 2, vsrc, 2); |
|
|
|
|
case 3: return vcopyq_laneq_f32(vdst, 2, vsrc, 3); |
|
|
|
|
} |
|
|
|
|
assert(!"Unreachable code executed!"); |
|
|
|
|
case 3: |
|
|
|
|
switch(slane) { |
|
|
|
|
case 0: return vcopyq_laneq_f32(vdst, 3, vsrc, 0); |
|
|
|
|
case 1: return vcopyq_laneq_f32(vdst, 3, vsrc, 1); |
|
|
|
|
case 2: return vcopyq_laneq_f32(vdst, 3, vsrc, 2); |
|
|
|
|
case 3: return vcopyq_laneq_f32(vdst, 3, vsrc, 3); |
|
|
|
|
} |
|
|
|
|
assert(!"Unreachable code executed!"); |
|
|
|
|
} |
|
|
|
|
case 0: return vcopyq_laneq_f32(vdst, 3, vsrc, 0); |
|
|
|
|
case 1: return vcopyq_laneq_f32(vdst, 3, vsrc, 1); |
|
|
|
|
case 2: return vcopyq_laneq_f32(vdst, 3, vsrc, 2); |
|
|
|
|
case 3: return vcopyq_laneq_f32(vdst, 3, vsrc, 3); |
|
|
|
|
} |
|
|
|
|
assert(!"Unreachable code executed!"); |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
|
|
|
|
|
float l; |
|
|
|
@ -104,7 +104,7 @@ namespace glm { |
|
|
|
|
|
|
|
|
|
static float32x4_t mul_lane(float32x4_t v, float32x4_t vlane, int lane) { |
|
|
|
|
#if GLM_ARCH & GLM_ARCH_ARMV8_BIT |
|
|
|
|
switch(lane) {
|
|
|
|
|
switch(lane) {
|
|
|
|
|
case 0: return vmulq_laneq_f32(v, vlane, 0); break; |
|
|
|
|
case 1: return vmulq_laneq_f32(v, vlane, 1); break; |
|
|
|
|
case 2: return vmulq_laneq_f32(v, vlane, 2); break; |
|
|
|
@ -127,19 +127,19 @@ namespace glm { |
|
|
|
|
# define FMADD_LANE(acc, x, y, L) do { acc = vmlaq_laneq_f32(acc, x, y, L); } while(0) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
switch(lane) {
|
|
|
|
|
switch(lane) {
|
|
|
|
|
case 0:
|
|
|
|
|
FMADD_LANE(acc, v, vlane, 0); |
|
|
|
|
return acc; |
|
|
|
|
FMADD_LANE(acc, v, vlane, 0); |
|
|
|
|
return acc; |
|
|
|
|
case 1: |
|
|
|
|
FMADD_LANE(acc, v, vlane, 1); |
|
|
|
|
return acc; |
|
|
|
|
FMADD_LANE(acc, v, vlane, 1); |
|
|
|
|
return acc; |
|
|
|
|
case 2: |
|
|
|
|
FMADD_LANE(acc, v, vlane, 2); |
|
|
|
|
return acc; |
|
|
|
|
FMADD_LANE(acc, v, vlane, 2); |
|
|
|
|
return acc; |
|
|
|
|
case 3: |
|
|
|
|
FMADD_LANE(acc, v, vlane, 3); |
|
|
|
|
return acc; |
|
|
|
|
FMADD_LANE(acc, v, vlane, 3); |
|
|
|
|
return acc; |
|
|
|
|
default:
|
|
|
|
|
assert(!"Unreachable code executed!"); |
|
|
|
|
} |
|
|
|
|