diff options
Diffstat (limited to 'vendor/golang.org/x/sys/unix/bpxsvc_zos.s')
| -rw-r--r-- | vendor/golang.org/x/sys/unix/bpxsvc_zos.s | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/vendor/golang.org/x/sys/unix/bpxsvc_zos.s b/vendor/golang.org/x/sys/unix/bpxsvc_zos.s new file mode 100644 index 0000000..4bd4a17 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/bpxsvc_zos.s | |||
| @@ -0,0 +1,192 @@ | |||
| 1 | // Copyright 2024 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | #include "go_asm.h" | ||
| 6 | #include "textflag.h" | ||
| 7 | |||
| 8 | // function to call USS assembly language services | ||
| 9 | // | ||
| 10 | // doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bit64env.htm | ||
| 11 | // | ||
| 12 | // arg1 unsafe.Pointer array that ressembles an OS PLIST | ||
| 13 | // | ||
| 14 | // arg2 function offset as in | ||
| 15 | // doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bpx2cr_List_of_offsets.htm | ||
| 16 | // | ||
| 17 | // func bpxcall(plist []unsafe.Pointer, bpx_offset int64) | ||
| 18 | |||
| 19 | TEXT ·bpxcall(SB), NOSPLIT|NOFRAME, $0 | ||
| 20 | MOVD plist_base+0(FP), R1 // r1 points to plist | ||
| 21 | MOVD bpx_offset+24(FP), R2 // r2 offset to BPX vector table | ||
| 22 | MOVD R14, R7 // save r14 | ||
| 23 | MOVD R15, R8 // save r15 | ||
| 24 | MOVWZ 16(R0), R9 | ||
| 25 | MOVWZ 544(R9), R9 | ||
| 26 | MOVWZ 24(R9), R9 // call vector in r9 | ||
| 27 | ADD R2, R9 // add offset to vector table | ||
| 28 | MOVWZ (R9), R9 // r9 points to entry point | ||
| 29 | BYTE $0x0D // BL R14,R9 --> basr r14,r9 | ||
| 30 | BYTE $0xE9 // clobbers 0,1,14,15 | ||
| 31 | MOVD R8, R15 // restore 15 | ||
| 32 | JMP R7 // return via saved return address | ||
| 33 | |||
| 34 | // func A2e(arr [] byte) | ||
| 35 | // code page conversion from 819 to 1047 | ||
| 36 | TEXT ·A2e(SB), NOSPLIT|NOFRAME, $0 | ||
| 37 | MOVD arg_base+0(FP), R2 // pointer to arry of characters | ||
| 38 | MOVD arg_len+8(FP), R3 // count | ||
| 39 | XOR R0, R0 | ||
| 40 | XOR R1, R1 | ||
| 41 | BYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2)) | ||
| 42 | |||
| 43 | // ASCII -> EBCDIC conversion table: | ||
| 44 | BYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03 | ||
| 45 | BYTE $0x37; BYTE $0x2d; BYTE $0x2e; BYTE $0x2f | ||
| 46 | BYTE $0x16; BYTE $0x05; BYTE $0x15; BYTE $0x0b | ||
| 47 | BYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f | ||
| 48 | BYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13 | ||
| 49 | BYTE $0x3c; BYTE $0x3d; BYTE $0x32; BYTE $0x26 | ||
| 50 | BYTE $0x18; BYTE $0x19; BYTE $0x3f; BYTE $0x27 | ||
| 51 | BYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f | ||
| 52 | BYTE $0x40; BYTE $0x5a; BYTE $0x7f; BYTE $0x7b | ||
| 53 | BYTE $0x5b; BYTE $0x6c; BYTE $0x50; BYTE $0x7d | ||
| 54 | BYTE $0x4d; BYTE $0x5d; BYTE $0x5c; BYTE $0x4e | ||
| 55 | BYTE $0x6b; BYTE $0x60; BYTE $0x4b; BYTE $0x61 | ||
| 56 | BYTE $0xf0; BYTE $0xf1; BYTE $0xf2; BYTE $0xf3 | ||
| 57 | BYTE $0xf4; BYTE $0xf5; BYTE $0xf6; BYTE $0xf7 | ||
| 58 | BYTE $0xf8; BYTE $0xf9; BYTE $0x7a; BYTE $0x5e | ||
| 59 | BYTE $0x4c; BYTE $0x7e; BYTE $0x6e; BYTE $0x6f | ||
| 60 | BYTE $0x7c; BYTE $0xc1; BYTE $0xc2; BYTE $0xc3 | ||
| 61 | BYTE $0xc4; BYTE $0xc5; BYTE $0xc6; BYTE $0xc7 | ||
| 62 | BYTE $0xc8; BYTE $0xc9; BYTE $0xd1; BYTE $0xd2 | ||
| 63 | BYTE $0xd3; BYTE $0xd4; BYTE $0xd5; BYTE $0xd6 | ||
| 64 | BYTE $0xd7; BYTE $0xd8; BYTE $0xd9; BYTE $0xe2 | ||
| 65 | BYTE $0xe3; BYTE $0xe4; BYTE $0xe5; BYTE $0xe6 | ||
| 66 | BYTE $0xe7; BYTE $0xe8; BYTE $0xe9; BYTE $0xad | ||
| 67 | BYTE $0xe0; BYTE $0xbd; BYTE $0x5f; BYTE $0x6d | ||
| 68 | BYTE $0x79; BYTE $0x81; BYTE $0x82; BYTE $0x83 | ||
| 69 | BYTE $0x84; BYTE $0x85; BYTE $0x86; BYTE $0x87 | ||
| 70 | BYTE $0x88; BYTE $0x89; BYTE $0x91; BYTE $0x92 | ||
| 71 | BYTE $0x93; BYTE $0x94; BYTE $0x95; BYTE $0x96 | ||
| 72 | BYTE $0x97; BYTE $0x98; BYTE $0x99; BYTE $0xa2 | ||
| 73 | BYTE $0xa3; BYTE $0xa4; BYTE $0xa5; BYTE $0xa6 | ||
| 74 | BYTE $0xa7; BYTE $0xa8; BYTE $0xa9; BYTE $0xc0 | ||
| 75 | BYTE $0x4f; BYTE $0xd0; BYTE $0xa1; BYTE $0x07 | ||
| 76 | BYTE $0x20; BYTE $0x21; BYTE $0x22; BYTE $0x23 | ||
| 77 | BYTE $0x24; BYTE $0x25; BYTE $0x06; BYTE $0x17 | ||
| 78 | BYTE $0x28; BYTE $0x29; BYTE $0x2a; BYTE $0x2b | ||
| 79 | BYTE $0x2c; BYTE $0x09; BYTE $0x0a; BYTE $0x1b | ||
| 80 | BYTE $0x30; BYTE $0x31; BYTE $0x1a; BYTE $0x33 | ||
| 81 | BYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x08 | ||
| 82 | BYTE $0x38; BYTE $0x39; BYTE $0x3a; BYTE $0x3b | ||
| 83 | BYTE $0x04; BYTE $0x14; BYTE $0x3e; BYTE $0xff | ||
| 84 | BYTE $0x41; BYTE $0xaa; BYTE $0x4a; BYTE $0xb1 | ||
| 85 | BYTE $0x9f; BYTE $0xb2; BYTE $0x6a; BYTE $0xb5 | ||
| 86 | BYTE $0xbb; BYTE $0xb4; BYTE $0x9a; BYTE $0x8a | ||
| 87 | BYTE $0xb0; BYTE $0xca; BYTE $0xaf; BYTE $0xbc | ||
| 88 | BYTE $0x90; BYTE $0x8f; BYTE $0xea; BYTE $0xfa | ||
| 89 | BYTE $0xbe; BYTE $0xa0; BYTE $0xb6; BYTE $0xb3 | ||
| 90 | BYTE $0x9d; BYTE $0xda; BYTE $0x9b; BYTE $0x8b | ||
| 91 | BYTE $0xb7; BYTE $0xb8; BYTE $0xb9; BYTE $0xab | ||
| 92 | BYTE $0x64; BYTE $0x65; BYTE $0x62; BYTE $0x66 | ||
| 93 | BYTE $0x63; BYTE $0x67; BYTE $0x9e; BYTE $0x68 | ||
| 94 | BYTE $0x74; BYTE $0x71; BYTE $0x72; BYTE $0x73 | ||
| 95 | BYTE $0x78; BYTE $0x75; BYTE $0x76; BYTE $0x77 | ||
| 96 | BYTE $0xac; BYTE $0x69; BYTE $0xed; BYTE $0xee | ||
| 97 | BYTE $0xeb; BYTE $0xef; BYTE $0xec; BYTE $0xbf | ||
| 98 | BYTE $0x80; BYTE $0xfd; BYTE $0xfe; BYTE $0xfb | ||
| 99 | BYTE $0xfc; BYTE $0xba; BYTE $0xae; BYTE $0x59 | ||
| 100 | BYTE $0x44; BYTE $0x45; BYTE $0x42; BYTE $0x46 | ||
| 101 | BYTE $0x43; BYTE $0x47; BYTE $0x9c; BYTE $0x48 | ||
| 102 | BYTE $0x54; BYTE $0x51; BYTE $0x52; BYTE $0x53 | ||
| 103 | BYTE $0x58; BYTE $0x55; BYTE $0x56; BYTE $0x57 | ||
| 104 | BYTE $0x8c; BYTE $0x49; BYTE $0xcd; BYTE $0xce | ||
| 105 | BYTE $0xcb; BYTE $0xcf; BYTE $0xcc; BYTE $0xe1 | ||
| 106 | BYTE $0x70; BYTE $0xdd; BYTE $0xde; BYTE $0xdb | ||
| 107 | BYTE $0xdc; BYTE $0x8d; BYTE $0x8e; BYTE $0xdf | ||
| 108 | |||
| 109 | retry: | ||
| 110 | WORD $0xB9931022 // TROO 2,2,b'0001' | ||
| 111 | BVS retry | ||
| 112 | RET | ||
| 113 | |||
| 114 | // func e2a(arr [] byte) | ||
| 115 | // code page conversion from 1047 to 819 | ||
| 116 | TEXT ·E2a(SB), NOSPLIT|NOFRAME, $0 | ||
| 117 | MOVD arg_base+0(FP), R2 // pointer to arry of characters | ||
| 118 | MOVD arg_len+8(FP), R3 // count | ||
| 119 | XOR R0, R0 | ||
| 120 | XOR R1, R1 | ||
| 121 | BYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2)) | ||
| 122 | |||
| 123 | // EBCDIC -> ASCII conversion table: | ||
| 124 | BYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03 | ||
| 125 | BYTE $0x9c; BYTE $0x09; BYTE $0x86; BYTE $0x7f | ||
| 126 | BYTE $0x97; BYTE $0x8d; BYTE $0x8e; BYTE $0x0b | ||
| 127 | BYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f | ||
| 128 | BYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13 | ||
| 129 | BYTE $0x9d; BYTE $0x0a; BYTE $0x08; BYTE $0x87 | ||
| 130 | BYTE $0x18; BYTE $0x19; BYTE $0x92; BYTE $0x8f | ||
| 131 | BYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f | ||
| 132 | BYTE $0x80; BYTE $0x81; BYTE $0x82; BYTE $0x83 | ||
| 133 | BYTE $0x84; BYTE $0x85; BYTE $0x17; BYTE $0x1b | ||
| 134 | BYTE $0x88; BYTE $0x89; BYTE $0x8a; BYTE $0x8b | ||
| 135 | BYTE $0x8c; BYTE $0x05; BYTE $0x06; BYTE $0x07 | ||
| 136 | BYTE $0x90; BYTE $0x91; BYTE $0x16; BYTE $0x93 | ||
| 137 | BYTE $0x94; BYTE $0x95; BYTE $0x96; BYTE $0x04 | ||
| 138 | BYTE $0x98; BYTE $0x99; BYTE $0x9a; BYTE $0x9b | ||
| 139 | BYTE $0x14; BYTE $0x15; BYTE $0x9e; BYTE $0x1a | ||
| 140 | BYTE $0x20; BYTE $0xa0; BYTE $0xe2; BYTE $0xe4 | ||
| 141 | BYTE $0xe0; BYTE $0xe1; BYTE $0xe3; BYTE $0xe5 | ||
| 142 | BYTE $0xe7; BYTE $0xf1; BYTE $0xa2; BYTE $0x2e | ||
| 143 | BYTE $0x3c; BYTE $0x28; BYTE $0x2b; BYTE $0x7c | ||
| 144 | BYTE $0x26; BYTE $0xe9; BYTE $0xea; BYTE $0xeb | ||
| 145 | BYTE $0xe8; BYTE $0xed; BYTE $0xee; BYTE $0xef | ||
| 146 | BYTE $0xec; BYTE $0xdf; BYTE $0x21; BYTE $0x24 | ||
| 147 | BYTE $0x2a; BYTE $0x29; BYTE $0x3b; BYTE $0x5e | ||
| 148 | BYTE $0x2d; BYTE $0x2f; BYTE $0xc2; BYTE $0xc4 | ||
| 149 | BYTE $0xc0; BYTE $0xc1; BYTE $0xc3; BYTE $0xc5 | ||
| 150 | BYTE $0xc7; BYTE $0xd1; BYTE $0xa6; BYTE $0x2c | ||
| 151 | BYTE $0x25; BYTE $0x5f; BYTE $0x3e; BYTE $0x3f | ||
| 152 | BYTE $0xf8; BYTE $0xc9; BYTE $0xca; BYTE $0xcb | ||
| 153 | BYTE $0xc8; BYTE $0xcd; BYTE $0xce; BYTE $0xcf | ||
| 154 | BYTE $0xcc; BYTE $0x60; BYTE $0x3a; BYTE $0x23 | ||
| 155 | BYTE $0x40; BYTE $0x27; BYTE $0x3d; BYTE $0x22 | ||
| 156 | BYTE $0xd8; BYTE $0x61; BYTE $0x62; BYTE $0x63 | ||
| 157 | BYTE $0x64; BYTE $0x65; BYTE $0x66; BYTE $0x67 | ||
| 158 | BYTE $0x68; BYTE $0x69; BYTE $0xab; BYTE $0xbb | ||
| 159 | BYTE $0xf0; BYTE $0xfd; BYTE $0xfe; BYTE $0xb1 | ||
| 160 | BYTE $0xb0; BYTE $0x6a; BYTE $0x6b; BYTE $0x6c | ||
| 161 | BYTE $0x6d; BYTE $0x6e; BYTE $0x6f; BYTE $0x70 | ||
| 162 | BYTE $0x71; BYTE $0x72; BYTE $0xaa; BYTE $0xba | ||
| 163 | BYTE $0xe6; BYTE $0xb8; BYTE $0xc6; BYTE $0xa4 | ||
| 164 | BYTE $0xb5; BYTE $0x7e; BYTE $0x73; BYTE $0x74 | ||
| 165 | BYTE $0x75; BYTE $0x76; BYTE $0x77; BYTE $0x78 | ||
| 166 | BYTE $0x79; BYTE $0x7a; BYTE $0xa1; BYTE $0xbf | ||
| 167 | BYTE $0xd0; BYTE $0x5b; BYTE $0xde; BYTE $0xae | ||
| 168 | BYTE $0xac; BYTE $0xa3; BYTE $0xa5; BYTE $0xb7 | ||
| 169 | BYTE $0xa9; BYTE $0xa7; BYTE $0xb6; BYTE $0xbc | ||
| 170 | BYTE $0xbd; BYTE $0xbe; BYTE $0xdd; BYTE $0xa8 | ||
| 171 | BYTE $0xaf; BYTE $0x5d; BYTE $0xb4; BYTE $0xd7 | ||
| 172 | BYTE $0x7b; BYTE $0x41; BYTE $0x42; BYTE $0x43 | ||
| 173 | BYTE $0x44; BYTE $0x45; BYTE $0x46; BYTE $0x47 | ||
| 174 | BYTE $0x48; BYTE $0x49; BYTE $0xad; BYTE $0xf4 | ||
| 175 | BYTE $0xf6; BYTE $0xf2; BYTE $0xf3; BYTE $0xf5 | ||
| 176 | BYTE $0x7d; BYTE $0x4a; BYTE $0x4b; BYTE $0x4c | ||
| 177 | BYTE $0x4d; BYTE $0x4e; BYTE $0x4f; BYTE $0x50 | ||
| 178 | BYTE $0x51; BYTE $0x52; BYTE $0xb9; BYTE $0xfb | ||
| 179 | BYTE $0xfc; BYTE $0xf9; BYTE $0xfa; BYTE $0xff | ||
| 180 | BYTE $0x5c; BYTE $0xf7; BYTE $0x53; BYTE $0x54 | ||
| 181 | BYTE $0x55; BYTE $0x56; BYTE $0x57; BYTE $0x58 | ||
| 182 | BYTE $0x59; BYTE $0x5a; BYTE $0xb2; BYTE $0xd4 | ||
| 183 | BYTE $0xd6; BYTE $0xd2; BYTE $0xd3; BYTE $0xd5 | ||
| 184 | BYTE $0x30; BYTE $0x31; BYTE $0x32; BYTE $0x33 | ||
| 185 | BYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x37 | ||
| 186 | BYTE $0x38; BYTE $0x39; BYTE $0xb3; BYTE $0xdb | ||
| 187 | BYTE $0xdc; BYTE $0xd9; BYTE $0xda; BYTE $0x9f | ||
| 188 | |||
| 189 | retry: | ||
| 190 | WORD $0xB9931022 // TROO 2,2,b'0001' | ||
| 191 | BVS retry | ||
| 192 | RET | ||
