1 /*************************************************************************************** 2 * Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3 * Copyright (c) 2020-2021 Peng Cheng Laboratory 4 * 5 * XiangShan is licensed under Mulan PSL v2. 6 * You can use this software according to the terms and conditions of the Mulan PSL v2. 7 * You may obtain a copy of Mulan PSL v2 at: 8 * http://license.coscl.org.cn/MulanPSL2 9 * 10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13 * 14 * See the Mulan PSL v2 for more details. 15 ***************************************************************************************/ 16 17 #include <stdio.h> 18 #include <assert.h> 19 #include <stdint.h> 20 21 int main(int argc, char *argv[]) { 22 assert(argc == 3); 23 24 FILE *in = fopen(argv[1], "rb"); 25 assert(in != NULL); 26 27 FILE *out = fopen(argv[2], "w"); 28 assert(out != NULL); 29 30 char line[128]; 31 uint32_t addr; 32 union { 33 uint8_t _8[4]; 34 uint32_t _32; 35 } data[4]; 36 while (fgets(line, 128, in) != NULL) { 37 if (line[0] == '@') { 38 sscanf(line + 1, "%x", &addr); 39 assert(addr % 4 == 0); 40 fprintf(out, "@%08x\n", addr / 4); 41 } 42 else { 43 int ret = sscanf(line, 44 "%hhx%hhx%hhx%hhx" 45 "%hhx%hhx%hhx%hhx" 46 "%hhx%hhx%hhx%hhx" 47 "%hhx%hhx%hhx%hhx", 48 &data[0]._8[0], &data[0]._8[1], &data[0]._8[2], &data[0]._8[3], 49 &data[1]._8[0], &data[1]._8[1], &data[1]._8[2], &data[1]._8[3], 50 &data[2]._8[0], &data[2]._8[1], &data[2]._8[2], &data[2]._8[3], 51 &data[3]._8[0], &data[3]._8[1], &data[3]._8[2], &data[3]._8[3]); 52 53 assert(ret == EOF || ret == 4 || ret == 8 || ret == 12 || ret == 16); 54 55 if (ret == EOF) continue; 56 57 if (ret >= 4) fprintf(out, "%08x ", data[0]._32); 58 if (ret >= 8) fprintf(out, "%08x ", data[1]._32); 59 if (ret >= 12) fprintf(out, "%08x ", data[2]._32); 60 if (ret >= 16) fprintf(out, "%08x ", data[3]._32); 61 fprintf(out, "\n"); 62 } 63 } 64 65 fclose(in); 66 fclose(out); 67 68 return 0; 69 } 70