Changeset 609 for branches/GNU/src/binutils/opcodes/cgen-opc.c
- Timestamp:
- Aug 16, 2003, 6:59:22 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GNU/src/binutils/opcodes/cgen-opc.c
-
Property cvs2svn:cvs-rev
changed from
1.1
to1.1.1.2
r608 r609 21 21 22 22 #include "sysdep.h" 23 #include <ctype.h>24 23 #include <stdio.h> 25 24 #include "ansidecl.h" 26 25 #include "libiberty.h" 26 #include "safe-ctype.h" 27 27 #include "bfd.h" 28 28 #include "symcat.h" … … 70 70 while (*p 71 71 && (*p == *n 72 || (isalpha ((unsigned char) *p) 73 && (tolower ((unsigned char) *p) 74 == tolower ((unsigned char) *n))))) 72 || (ISALPHA (*p) && (TOLOWER (*p) == TOLOWER (*n))))) 75 73 ++n, ++p; 76 74 … … 119 117 { 120 118 unsigned int hash; 119 size_t i; 121 120 122 121 if (kt->name_hash_table == NULL) … … 133 132 if (ke->name[0] == 0) 134 133 kt->null_entry = ke; 134 135 for (i = 1; i < strlen (ke->name); i++) 136 if (! ISALNUM (ke->name[i]) 137 && ! strchr (kt->nonalpha_chars, ke->name[i])) 138 { 139 size_t idx = strlen (kt->nonalpha_chars); 140 141 /* If you hit this limit, please don't just 142 increase the size of the field, instead 143 look for a better algorithm. */ 144 if (idx >= sizeof (kt->nonalpha_chars) - 1) 145 abort (); 146 kt->nonalpha_chars[idx] = ke->name[i]; 147 kt->nonalpha_chars[idx+1] = 0; 148 } 135 149 } 136 150 … … 217 231 else 218 232 for (hash = 0; *name; ++name) 219 hash = (hash * 97) + (unsigned char) tolower(*name);233 hash = (hash * 97) + (unsigned char) TOLOWER (*name); 220 234 return hash % kt->hash_table_size; 221 235 } … … 379 393 int length; 380 394 { 381 bfd_get_bits (buf, length, cd->insn_endian == CGEN_ENDIAN_BIG); 395 int big_p = (cd->insn_endian == CGEN_ENDIAN_BIG); 396 int insn_chunk_bitsize = cd->insn_chunk_bitsize; 397 CGEN_INSN_INT value = 0; 398 399 if (insn_chunk_bitsize != 0 && insn_chunk_bitsize < length) 400 { 401 /* We need to divide up the incoming value into insn_chunk_bitsize-length 402 segments, and endian-convert them, one at a time. */ 403 int i; 404 405 /* Enforce divisibility. */ 406 if ((length % insn_chunk_bitsize) != 0) 407 abort (); 408 409 for (i = 0; i < length; i += insn_chunk_bitsize) /* NB: i == bits */ 410 { 411 int index; 412 bfd_vma this_value; 413 index = i; /* NB: not dependent on endianness; opposite of cgen_put_insn_value! */ 414 this_value = bfd_get_bits (& buf[index / 8], insn_chunk_bitsize, big_p); 415 value = (value << insn_chunk_bitsize) | this_value; 416 } 417 } 418 else 419 { 420 value = bfd_get_bits (buf, length, cd->insn_endian == CGEN_ENDIAN_BIG); 421 } 422 423 return value; 382 424 } 383 425 … … 391 433 CGEN_INSN_INT value; 392 434 { 393 bfd_put_bits ((bfd_vma) value, buf, length, 394 cd->insn_endian == CGEN_ENDIAN_BIG); 435 int big_p = (cd->insn_endian == CGEN_ENDIAN_BIG); 436 int insn_chunk_bitsize = cd->insn_chunk_bitsize; 437 438 if (insn_chunk_bitsize != 0 && insn_chunk_bitsize < length) 439 { 440 /* We need to divide up the incoming value into insn_chunk_bitsize-length 441 segments, and endian-convert them, one at a time. */ 442 int i; 443 444 /* Enforce divisibility. */ 445 if ((length % insn_chunk_bitsize) != 0) 446 abort (); 447 448 for (i = 0; i < length; i += insn_chunk_bitsize) /* NB: i == bits */ 449 { 450 int index; 451 index = (length - insn_chunk_bitsize - i); /* NB: not dependent on endianness! */ 452 bfd_put_bits ((bfd_vma) value, & buf[index / 8], insn_chunk_bitsize, big_p); 453 value >>= insn_chunk_bitsize; 454 } 455 } 456 else 457 { 458 bfd_put_bits ((bfd_vma) value, buf, length, big_p); 459 } 395 460 } 396 461 -
Property cvs2svn:cvs-rev
changed from
Note:
See TracChangeset
for help on using the changeset viewer.