golang.org/x/sys@v0.20.1-0.20240517151509-673e0f94c16d/unix/bpxsvc_zos.s (about) 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