michael@0: #include "qword.h" michael@0: #include "x86_imm.h" michael@0: michael@0: #include michael@0: michael@0: unsigned int x86_imm_signsized( unsigned char * buf, size_t buf_len, michael@0: void *dest, unsigned int size ) { michael@0: signed char *cp = (signed char *) dest; michael@0: signed short *sp = (signed short *) dest; michael@0: int32_t *lp = (int32_t *) dest; michael@0: qword_t *qp = (qword_t *) dest; michael@0: michael@0: if ( size > buf_len ) { michael@0: return 0; michael@0: } michael@0: michael@0: /* Copy 'size' bytes from *buf to *op michael@0: * return number of bytes copied */ michael@0: switch (size) { michael@0: case 1: /* BYTE */ michael@0: *cp = *((signed char *) buf); michael@0: break; michael@0: case 2: /* WORD */ michael@0: *sp = *((signed short *) buf); michael@0: break; michael@0: case 6: michael@0: case 8: /* QWORD */ michael@0: *qp = *((qword_t *) buf); michael@0: break; michael@0: case 4: /* DWORD */ michael@0: default: michael@0: *lp = *((int32_t *) buf); michael@0: break; michael@0: } michael@0: return (size); michael@0: } michael@0: michael@0: unsigned int x86_imm_sized( unsigned char * buf, size_t buf_len, void *dest, michael@0: unsigned int size ) { michael@0: unsigned char *cp = (unsigned char *) dest; michael@0: unsigned short *sp = (unsigned short *) dest; michael@0: uint32_t *lp = (uint32_t *) dest; michael@0: qword_t *qp = (qword_t *) dest; michael@0: michael@0: if ( size > buf_len ) { michael@0: return 0; michael@0: } michael@0: michael@0: /* Copy 'size' bytes from *buf to *op michael@0: * return number of bytes copied */ michael@0: switch (size) { michael@0: case 1: /* BYTE */ michael@0: *cp = *((unsigned char *) buf); michael@0: break; michael@0: case 2: /* WORD */ michael@0: *sp = *((unsigned short *) buf); michael@0: break; michael@0: case 6: michael@0: case 8: /* QWORD */ michael@0: *qp = *((qword_t *) buf); michael@0: break; michael@0: case 4: /* DWORD */ michael@0: default: michael@0: *lp = *((uint32_t *) buf); michael@0: break; michael@0: } michael@0: michael@0: return (size); michael@0: } michael@0: