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 #include <string.h>
21
22 char outname [4][4096];
23
main(int argc,char * argv[])24 int main(int argc, char *argv[]) {
25 assert(argc == 2);
26
27 FILE *in = fopen(argv[1], "rb");
28 assert(in != NULL);
29
30 strcat(stpcpy(outname[0], argv[1]), "_0");
31 strcat(stpcpy(outname[1], argv[1]), "_1");
32 strcat(stpcpy(outname[2], argv[1]), "_2");
33 strcat(stpcpy(outname[3], argv[1]), "_3");
34
35 FILE *out[4];
36 out[0] = fopen(outname[0], "w");
37 out[1] = fopen(outname[1], "w");
38 out[2] = fopen(outname[2], "w");
39 out[3] = fopen(outname[3], "w");
40 assert(out[0] != NULL && out[1] != NULL && out[2] != NULL && out[3] != NULL);
41
42 char line[128];
43 int idx = 0;
44 while (fgets(line, 128, in) != NULL) {
45 if (line[0] == '@') {
46 uint32_t addr;
47 sscanf(line + 1, "%x", &addr);
48 assert(addr % 4 == 0);
49 fprintf(out[0], "\n@%08x\n", addr / 4);
50 fprintf(out[1], "\n@%08x\n", addr / 4);
51 fprintf(out[2], "\n@%08x\n", addr / 4);
52 fprintf(out[3], "\n@%08x\n", addr / 4);
53 idx = 0;
54 }
55 else {
56 // remove white spaces at the end
57 char *p = line + strlen(line) - 1;
58 while (p >= line && (*p == ' ' || *p == '\n' || *p == '\r')) p --;
59 p[1] = '\0';
60
61 p = line;
62 char *byte;
63 while ((byte = strsep(&p, " "))) {
64 fprintf(out[idx % 4], "%s ", byte);
65 idx ++;
66 }
67
68 if ((idx >> 2) % 16 == 0) {
69 fprintf(out[0], "\n");
70 fprintf(out[1], "\n");
71 fprintf(out[2], "\n");
72 fprintf(out[3], "\n");
73 }
74 }
75 }
76
77 fclose(in);
78 fclose(out[0]);
79 fclose(out[1]);
80 fclose(out[2]);
81 fclose(out[3]);
82
83 return 0;
84 }
85