

/* ********** Mnemonics ********************** */

/*	Move Mnemonics  */
#define ROAST_SIMD_SSE2_MOVDQA_XM( XMM_NUM, M128 )		__asm movdqa xmm ## XMM_NUM, [M128]
#define ROAST_SIMD_SSE2_MOVDQA_MX( M128, XMM_NUM )		__asm movdqa [M128], xmm ## XMM_NUM

#define ROAST_SIMD_SSE2_MOVUPD_XM( XMM_NUM, M128 )		__asm movupd xmm ## XMM_NUM, [M128]
#define ROAST_SIMD_SSE2_MOVUPD_MX( M128, XMM_NUM )		__asm movupd [M128], xmm ## XMM_NUM


/*
MOVDQA
  xmm1, xmm2/m128
  xmm2/m128, xmm1
  ACg̍_uNbh[h] 	SSE2
*/

#undef ___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__NEMONI__			movdqa

//	xmm <= void*
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		const void*
#define ___ROAST_SIMD__VAL_NAME_		p
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__xmm_m128"

//	xmm <= __m128
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		__m128
#define ___ROAST_SIMD__VAL_NAME_		m128val
#include "simd_core__xmm_m128"

//	xmm <= _ROAST_SIMD_M128
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		_ROAST_SIMD_M128
#define ___ROAST_SIMD__VAL_NAME_		m128val
#include "simd_core__xmm_m128"

//	void* <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		void*
#define ___ROAST_SIMD__VAL_NAME_		p
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm"

//	__m128& <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		__m128&
#define ___ROAST_SIMD__VAL_NAME_		m128val
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm"

//	_ROAST_SIMD_M128& <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		_ROAST_SIMD_M128&
#define ___ROAST_SIMD__VAL_NAME_		m128val
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm"

//	(get) __m128 <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		__m128
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm_get"

//	xmm <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#include "simd_core__xmm_xmm"




/*
MOVDQU
  xmm1, xmm2/m128
  xmm2/m128, xmm1
  ACg̍ĂȂ_uNbh[h] SSE2 
*/

#undef ___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__NEMONI__			movdqu

//	xmm <= void*
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		const void*
#define ___ROAST_SIMD__VAL_NAME_		p
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__xmm_m128"

//	xmm <= __m128
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		__m128
#define ___ROAST_SIMD__VAL_NAME_		m128val
#include "simd_core__xmm_m128"

//	xmm <= _ROAST_SIMD_M128
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		_ROAST_SIMD_M128
#define ___ROAST_SIMD__VAL_NAME_		m128val
#include "simd_core__xmm_m128"

//	void* <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		void*
#define ___ROAST_SIMD__VAL_NAME_		p
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm"

//	__m128& <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		__m128&
#define ___ROAST_SIMD__VAL_NAME_		m128val
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm"

//	_ROAST_SIMD_M128& <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		_ROAST_SIMD_M128&
#define ___ROAST_SIMD__VAL_NAME_		m128val
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm"

//	(get) __m128 <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		__m128
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm_get"

//	xmm <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#include "simd_core__xmm_xmm"



/*
MOVUPD
  xmm1, xmm2/m128
  xmm2/m128, xmm1
  2̃pbNh{x_lXMMWX^m̊ԁA܂XMMWX^ƃACg̍ĂȂƂ̊Ԃœ] SSE2 
*/

#undef ___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__NEMONI__			movupd

//	xmm <= double*
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		const double*
#define ___ROAST_SIMD__VAL_NAME_		d_array_2
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__xmm_m128"

//	xmm <= __m128
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		__m128
#define ___ROAST_SIMD__VAL_NAME_		m128val
#include "simd_core__xmm_m128"

//	xmm <= _ROAST_SIMD_M128
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		_ROAST_SIMD_M128
#define ___ROAST_SIMD__VAL_NAME_		m128val
#include "simd_core__xmm_m128"

//	double* <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		float*
#define ___ROAST_SIMD__VAL_NAME_		d_array_2
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm"

//	__m128& <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		__m128&
#define ___ROAST_SIMD__VAL_NAME_		m128val
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm"

//	_ROAST_SIMD_M128& <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		_ROAST_SIMD_M128&
#define ___ROAST_SIMD__VAL_NAME_		m128val
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm"

//	(get) __m128 <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#define ___ROAST_SIMD__VAL_TYPE_		__m128
#define ___ROAST_SIMD__VAL_IS_POINTER	
#include "simd_core__m128_xmm_get"

//	xmm <= xmm
#define ___ROAST_SIMD__NEMONI_			___ROAST_SIMD__NEMONI__
#include "simd_core__xmm_xmm"

		
/*

MOVUPD
  xmm1, xmm2/m128
  xmm2/m128, xmm1
  2̃pbNh{x_lXMMWX^m̊ԁA܂XMMWX^ƃACg̍ĂȂƂ̊Ԃœ] SSE2 

MOVHPD
  xmm, m64
  m64, xmm
  ʃpbNh{x_lXMMWX^̏ʃNbh[hƃƂ̊Ԃœ] SSE2 

MOVLPD
  xmm, m64
  m64, xmm
  ʃpbNh{x_lXMMWX^̉ʃNbh[hƃƂ̊Ԃœ] SSE2 

MOVDQ2Q
  mm, xmm
  XMMWX^̉ʂ̃Nbh[hMMXWX^ɓ] SSE2 

MOVQ2DQ
  xmm, mm
  MMXWX^XMMWX^̉ʂ̃Nbh[hɓ] SSE2 

MOVSD
  xmm1, xmm2/m64
  xmm2/m64, xmm
  XJ{x_lXMMWX^m̊ԁA܂XMMWX^ƃƂ̊Ԃœ] SSE2 

MOVMSKPD
  r32, xmm
  2̃pbNh{x_l畄}XN𒊏oėpWX^ɓ] SSE2 
*/


/*
 Z
 
 
ADDPD 	xmm1, xmm2/m128 	pbNh{x_lZ 	SSE2
ADDSD 	xmm1, xmm2/m64 	XJ{x_lZ 	SSE2
*/