2013-12-07 07:57:16 +01:00
|
|
|
/**
|
|
|
|
|
******************************************************************************
|
|
|
|
|
* Xenia : Xbox 360 Emulator Research Project *
|
|
|
|
|
******************************************************************************
|
|
|
|
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
|
|
|
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
|
|
|
|
******************************************************************************
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef ALLOY_CORE_H_
|
|
|
|
|
#define ALLOY_CORE_H_
|
|
|
|
|
|
|
|
|
|
// TODO(benvanik): move the common stuff into here?
|
|
|
|
|
#include <xenia/common.h>
|
|
|
|
|
|
2014-07-11 07:51:27 +02:00
|
|
|
#include <poly/poly.h>
|
|
|
|
|
|
2013-12-07 07:57:16 +01:00
|
|
|
#include <alloy/arena.h>
|
2013-12-23 23:01:13 +01:00
|
|
|
#include <alloy/delegate.h>
|
2013-12-07 07:57:16 +01:00
|
|
|
#include <alloy/string_buffer.h>
|
|
|
|
|
|
|
|
|
|
namespace alloy {
|
|
|
|
|
|
|
|
|
|
typedef struct XECACHEALIGN vec128_s {
|
|
|
|
|
union {
|
|
|
|
|
struct {
|
2014-07-11 05:20:00 +02:00
|
|
|
float x;
|
|
|
|
|
float y;
|
|
|
|
|
float z;
|
|
|
|
|
float w;
|
2013-12-07 07:57:16 +01:00
|
|
|
};
|
|
|
|
|
struct {
|
2014-07-11 05:20:00 +02:00
|
|
|
uint32_t ix;
|
|
|
|
|
uint32_t iy;
|
|
|
|
|
uint32_t iz;
|
|
|
|
|
uint32_t iw;
|
2013-12-07 07:57:16 +01:00
|
|
|
};
|
2014-07-11 05:20:00 +02:00
|
|
|
float f4[4];
|
|
|
|
|
uint32_t i4[4];
|
|
|
|
|
uint16_t s8[8];
|
|
|
|
|
uint8_t b16[16];
|
2013-12-07 07:57:16 +01:00
|
|
|
struct {
|
2014-07-11 05:20:00 +02:00
|
|
|
uint64_t low;
|
|
|
|
|
uint64_t high;
|
2013-12-07 07:57:16 +01:00
|
|
|
};
|
|
|
|
|
};
|
2014-05-27 05:28:21 +02:00
|
|
|
|
2014-07-11 05:20:00 +02:00
|
|
|
bool operator==(const vec128_s& b) const {
|
2014-05-27 05:28:21 +02:00
|
|
|
return low == b.low && high == b.high;
|
|
|
|
|
}
|
2013-12-07 07:57:16 +01:00
|
|
|
} vec128_t;
|
2014-01-29 05:33:13 +01:00
|
|
|
XEFORCEINLINE vec128_t vec128i(uint32_t x, uint32_t y, uint32_t z, uint32_t w) {
|
|
|
|
|
vec128_t v;
|
2014-07-11 05:20:00 +02:00
|
|
|
v.i4[0] = x;
|
|
|
|
|
v.i4[1] = y;
|
|
|
|
|
v.i4[2] = z;
|
|
|
|
|
v.i4[3] = w;
|
2014-01-29 05:33:13 +01:00
|
|
|
return v;
|
|
|
|
|
}
|
|
|
|
|
XEFORCEINLINE vec128_t vec128f(float x, float y, float z, float w) {
|
|
|
|
|
vec128_t v;
|
2014-07-11 05:20:00 +02:00
|
|
|
v.f4[0] = x;
|
|
|
|
|
v.f4[1] = y;
|
|
|
|
|
v.f4[2] = z;
|
|
|
|
|
v.f4[3] = w;
|
2014-01-29 05:33:13 +01:00
|
|
|
return v;
|
|
|
|
|
}
|
2014-07-11 05:20:00 +02:00
|
|
|
XEFORCEINLINE vec128_t vec128b(uint8_t x0, uint8_t x1, uint8_t x2, uint8_t x3,
|
|
|
|
|
uint8_t y0, uint8_t y1, uint8_t y2, uint8_t y3,
|
|
|
|
|
uint8_t z0, uint8_t z1, uint8_t z2, uint8_t z3,
|
|
|
|
|
uint8_t w0, uint8_t w1, uint8_t w2, uint8_t w3) {
|
2014-02-02 11:18:59 +01:00
|
|
|
vec128_t v;
|
2014-07-11 05:20:00 +02:00
|
|
|
v.b16[0] = x3;
|
|
|
|
|
v.b16[1] = x2;
|
|
|
|
|
v.b16[2] = x1;
|
|
|
|
|
v.b16[3] = x0;
|
|
|
|
|
v.b16[4] = y3;
|
|
|
|
|
v.b16[5] = y2;
|
|
|
|
|
v.b16[6] = y1;
|
|
|
|
|
v.b16[7] = y0;
|
|
|
|
|
v.b16[8] = z3;
|
|
|
|
|
v.b16[9] = z2;
|
|
|
|
|
v.b16[10] = z1;
|
|
|
|
|
v.b16[11] = z0;
|
|
|
|
|
v.b16[12] = w3;
|
|
|
|
|
v.b16[13] = w2;
|
|
|
|
|
v.b16[14] = w1;
|
|
|
|
|
v.b16[15] = w0;
|
2014-02-02 11:18:59 +01:00
|
|
|
return v;
|
|
|
|
|
}
|
2013-12-07 07:57:16 +01:00
|
|
|
|
|
|
|
|
} // namespace alloy
|
|
|
|
|
|
|
|
|
|
#endif // ALLOY_CORE_H_
|