diff options
Diffstat (limited to 'include/opcode/arc-func.h')
-rw-r--r-- | include/opcode/arc-func.h | 188 |
1 files changed, 136 insertions, 52 deletions
diff --git a/include/opcode/arc-func.h b/include/opcode/arc-func.h index 65d21e3..7835610 100644 --- a/include/opcode/arc-func.h +++ b/include/opcode/arc-func.h @@ -22,8 +22,8 @@ /* mask = 00000000000000000000000000000000. */ #ifndef REPLACE_none #define REPLACE_none -ATTRIBUTE_UNUSED static unsigned -replace_none (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_none (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x00; @@ -35,8 +35,8 @@ replace_none (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 11111111. */ #ifndef REPLACE_bits8 #define REPLACE_bits8 -ATTRIBUTE_UNUSED static unsigned -replace_bits8 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_bits8 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xff; insn |= ((value >> 0) & 0x00ff) << 0; @@ -49,8 +49,8 @@ replace_bits8 (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 1111111111111111. */ #ifndef REPLACE_bits16 #define REPLACE_bits16 -ATTRIBUTE_UNUSED static unsigned -replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_bits16 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffff; insn |= ((value >> 0) & 0xffff) << 0; @@ -63,8 +63,8 @@ replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 111111111111111111111111. */ #ifndef REPLACE_bits24 #define REPLACE_bits24 -ATTRIBUTE_UNUSED static unsigned -replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_bits24 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffff; insn |= ((value >> 0) & 0xffffff) << 0; @@ -78,8 +78,8 @@ replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 111111111111111111111111. */ #ifndef REPLACE_bits24_be #define REPLACE_bits24_be -ATTRIBUTE_UNUSED static unsigned -replace_bits24_be (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_bits24_be (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffff00; insn |= ((value >> 0) & 0xffffff) << 8; @@ -87,27 +87,39 @@ replace_bits24_be (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_bits24_be */ +#endif /* REPLACE_bits24_be. */ /* mask = 11111111111111111111111111111111. */ #ifndef REPLACE_word32 #define REPLACE_word32 -ATTRIBUTE_UNUSED static unsigned -replace_word32 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_word32 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffffff; insn |= ((value >> 0) & 0xffffffff) << 0; return insn; } +#endif /* REPLACE_word32. */ + +/* mask = 1111111111111111111111111111111111111111111111111111111111111111. */ +#ifndef REPLACE_word64 +#define REPLACE_word64 +ATTRIBUTE_UNUSED static bfd_vma +replace_word64 (bfd_vma insn, bfd_vma value) +{ + insn |= value; + + return insn; +} +#endif /* REPLACE_word64. */ -#endif /* REPLACE_word32 */ /* mask = 0000000000000000000000000000000011111111111111111111111111111111. */ #ifndef REPLACE_limm #define REPLACE_limm -ATTRIBUTE_UNUSED static unsigned -replace_limm (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_limm (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffffff; insn |= ((value >> 0) & 0xffffffff) << 0; @@ -115,13 +127,13 @@ replace_limm (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_limm */ +#endif /* REPLACE_limm. */ /* mask = 000000000000000011111111111111111111111111111111. */ #ifndef REPLACE_limms #define REPLACE_limms -ATTRIBUTE_UNUSED static unsigned -replace_limms (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_limms (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffffff; insn |= ((value >> 0) & 0xffffffff) << 0; @@ -129,13 +141,13 @@ replace_limms (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_limms */ +#endif /* REPLACE_limms. */ /* mask = 00000111111111102222222222000000. */ #ifndef REPLACE_disp21h #define REPLACE_disp21h -ATTRIBUTE_UNUSED static unsigned -replace_disp21h (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp21h (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7feffc0; insn |= ((value >> 0) & 0x03ff) << 17; @@ -144,13 +156,13 @@ replace_disp21h (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp21h */ +#endif /* REPLACE_disp21h. */ /* mask = 00000111111111002222222222000000. */ #ifndef REPLACE_disp21w #define REPLACE_disp21w -ATTRIBUTE_UNUSED static unsigned -replace_disp21w (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp21w (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7fcffc0; insn |= ((value >> 0) & 0x01ff) << 18; @@ -159,13 +171,13 @@ replace_disp21w (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp21w */ +#endif /* REPLACE_disp21w. */ /* mask = 00000111111111102222222222003333. */ #ifndef REPLACE_disp25h #define REPLACE_disp25h -ATTRIBUTE_UNUSED static unsigned -replace_disp25h (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp25h (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7feffcf; insn |= ((value >> 0) & 0x03ff) << 17; @@ -175,13 +187,13 @@ replace_disp25h (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp25h */ +#endif /* REPLACE_disp25h. */ /* mask = 00000111111111002222222222003333. */ #ifndef REPLACE_disp25w #define REPLACE_disp25w -ATTRIBUTE_UNUSED static unsigned -replace_disp25w (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp25w (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7fcffcf; insn |= ((value >> 0) & 0x01ff) << 18; @@ -191,13 +203,13 @@ replace_disp25w (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp25w */ +#endif /* REPLACE_disp25w. */ /* mask = 00000000000000000000000111111111. */ #ifndef REPLACE_disp9 #define REPLACE_disp9 -ATTRIBUTE_UNUSED static unsigned -replace_disp9 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp9 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x1ff; insn |= ((value >> 0) & 0x01ff) << 0; @@ -205,13 +217,13 @@ replace_disp9 (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp9 */ +#endif /* REPLACE_disp9. */ /* mask = 00000000111111112000000000000000. */ #ifndef REPLACE_disp9ls #define REPLACE_disp9ls -ATTRIBUTE_UNUSED static unsigned -replace_disp9ls (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp9ls (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xff8000; insn |= ((value >> 0) & 0x00ff) << 16; @@ -225,8 +237,8 @@ replace_disp9ls (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 0000000111111111. */ #ifndef REPLACE_disp9s #define REPLACE_disp9s -ATTRIBUTE_UNUSED static unsigned -replace_disp9s (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp9s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x1ff; insn |= ((value >> 0) & 0x01ff) << 0; @@ -234,13 +246,13 @@ replace_disp9s (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp9s */ +#endif /* REPLACE_disp9s. */ /* mask = 0000011111111111. */ #ifndef REPLACE_disp13s #define REPLACE_disp13s -ATTRIBUTE_UNUSED static unsigned -replace_disp13s (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp13s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7ff; insn |= ((value >> 0) & 0x07ff) << 0; @@ -248,13 +260,13 @@ replace_disp13s (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp13s */ +#endif /* REPLACE_disp13s. */ /* mask = 0000022222200111. */ #ifndef REPLACE_disp9s1 #define REPLACE_disp9s1 -ATTRIBUTE_UNUSED static unsigned -replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp9s1 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7e7; insn |= ((value >> 0) & 0x0007) << 0; @@ -263,13 +275,13 @@ replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp9s1 */ +#endif /* REPLACE_disp9s1. */ /* mask = 00000000000000000000111111222222. */ #ifndef REPLACE_disp12s #define REPLACE_disp12s -ATTRIBUTE_UNUSED static unsigned -replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp12s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xfff; insn |= ((value >> 0) & 0x003f) << 6; @@ -277,13 +289,13 @@ replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp12s */ +#endif /* REPLACE_disp12s. */ /* mask = 0000001111111111. */ #ifndef REPLACE_jli #define REPLACE_jli -ATTRIBUTE_UNUSED static unsigned -replace_jli (unsigned insn, int value) +ATTRIBUTE_UNUSED static bfd_vma +replace_jli (bfd_vma insn, bfd_vma value) { insn = insn & ~0x3ff; insn |= ((value >> 0) & 0x03ff) << 0; @@ -291,4 +303,76 @@ replace_jli (unsigned insn, int value) return insn; } -#endif /* REPLACE_jli */ +#endif /* REPLACE_jli. */ + +#ifndef REPLACE_disp8ls +#define REPLACE_disp8ls +/* mask = 0000 0000 1111 1110 2000 0000 0000 0000. */ +ATTRIBUTE_UNUSED static bfd_vma +replace_disp8ls (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0xfe8000; + insn |= ((value >> 0) & 0x007f) << 17; + insn |= ((value >> 7) & 0x0001) << 15; + + return insn; +} +#endif /* REPLACE_disp8ls. */ + +#ifndef REPLACE_disp9s +#define REPLACE_disp9s +/* mask = 0000000111111111 + insn = 1111001sssssssss. */ +static bfd_vma +replace_disp9s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0x1ff; + insn |= ((value >> 0) & 0x01ff) << 0; + + return insn; +} +#endif /* REPLACE_disp9s. */ + +#ifndef REPLACE_disp6s +#define REPLACE_disp6s +/* mask = 0000000000111111 + insn = 1111011000ssssss. */ +ATTRIBUTE_UNUSED static bfd_vma +replace_disp6s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0x3f; + insn |= ((value >> 0) & 0x003f) << 0; + + return insn; +} + +#endif /* REPLACE_disp6s. */ + +#ifndef REPLACE_disp7s +#define REPLACE_disp7s +/* mask = 0000000001111111 + insn = 11101bbb1sssssss. */ +ATTRIBUTE_UNUSED static bfd_vma +replace_disp7s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0x7f; + insn |= ((value >> 0) & 0x007f) << 0; + + return insn; +} +#endif /* REPLACE_disp7s. */ + +#ifndef REPLACE_disp12s +#define REPLACE_disp12s +/* mask = 00000000000000000000111111222222 + insn = 00100RRR101010000RRRssssssSSSSSS. */ +ATTRIBUTE_UNUSED static bfd_vma +replace_disp12s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0xfff; + insn |= ((value >> 0) & 0x003f) << 6; + insn |= ((value >> 6) & 0x003f) << 0; + + return insn; +} +#endif /* REPLACE_disp12s. */ |