#ifndef __SCC_MCODE_H__ #define __SCC_MCODE_H__ #include typedef enum { SCC_MCODE_ARCH_AMD64, } scc_mcode_arch_t; typedef SCC_VEC(u8) scc_mcode_buff_t; typedef struct { cbool is_littel_endian; scc_mcode_arch_t arch; scc_mcode_buff_t mcode; } scc_mcode_t; static inline void scc_mcode_init(scc_mcode_t *mcode, scc_mcode_arch_t arch) { scc_vec_init(mcode->mcode); mcode->arch = arch; mcode->is_littel_endian = true; } static inline void scc_mcode_add_u8(scc_mcode_t *mcode, u8 data) { scc_vec_push(mcode->mcode, data); } static inline void scc_mcode_add_u16(scc_mcode_t *mcode, u16 data) { if (mcode->is_littel_endian) { scc_vec_push(mcode->mcode, (u8)(data & 0xFF)); scc_vec_push(mcode->mcode, (u8)(data >> 8)); } else { scc_vec_push(mcode->mcode, (u8)(data >> 8)); scc_vec_push(mcode->mcode, (u8)(data & 0xFF)); } } static inline void scc_mcode_add_u32(scc_mcode_t *mcode, u32 data) { if (mcode->is_littel_endian) { scc_vec_push(mcode->mcode, (u8)(data & 0xFF)); scc_vec_push(mcode->mcode, (u8)(data >> 8)); scc_vec_push(mcode->mcode, (u8)(data >> 16)); scc_vec_push(mcode->mcode, (u8)(data >> 24)); } else { scc_vec_push(mcode->mcode, (u8)(data >> 24)); scc_vec_push(mcode->mcode, (u8)(data >> 16)); scc_vec_push(mcode->mcode, (u8)(data >> 8)); scc_vec_push(mcode->mcode, (u8)(data & 0xFF)); } } static inline void scc_mcode_add_u64(scc_mcode_t *mcode, uint64_t data) { if (mcode->is_littel_endian) { scc_vec_push(mcode->mcode, (u8)(data & 0xFF)); scc_vec_push(mcode->mcode, (u8)(data >> 8)); scc_vec_push(mcode->mcode, (u8)(data >> 16)); scc_vec_push(mcode->mcode, (u8)(data >> 24)); scc_vec_push(mcode->mcode, (u8)(data >> 32)); scc_vec_push(mcode->mcode, (u8)(data >> 40)); scc_vec_push(mcode->mcode, (u8)(data >> 48)); scc_vec_push(mcode->mcode, (u8)(data >> 56)); } else { scc_vec_push(mcode->mcode, (u8)(data >> 56)); scc_vec_push(mcode->mcode, (u8)(data >> 48)); scc_vec_push(mcode->mcode, (u8)(data >> 40)); scc_vec_push(mcode->mcode, (u8)(data >> 32)); scc_vec_push(mcode->mcode, (u8)(data >> 24)); scc_vec_push(mcode->mcode, (u8)(data >> 16)); scc_vec_push(mcode->mcode, (u8)(data >> 8)); scc_vec_push(mcode->mcode, (u8)(data & 0xFF)); } } #endif /* __SCC_MCODE_H__ */