ハードコーディングされたステートメントを評価するために SPARC asm コードを書いていますが、理解できないエラーが発生します。私はあらゆる場所を検索しましたが、いくつかのバグ レポートでは多く出てくるように見えますが、プログラマー向けに見つけた実際の手がかりはありません。はい、それは宿題です。はい、まだ終わっていません。はい、あちこちでブランチの遅延があります。私は自分でそれらに到達しますが、エラーが何であるかを知る必要があります. このエラーは何の役にも立ちませんし、私が持っている本も役に立ちません。
私はこれに本当に慣れていないので、どんな助けでも大歓迎です。
1 /*Justin Reeves*/
2 /*max{x^3-14x^2+56x-64} from [-2,8]*/
3 /*for (x = lwr, x <= upr, x++) */
4 define(lwr_b, -2) !lower bound
5 define(upr_b, 8) !upper bound
6 define(x_r, %l0) !x
7 define(sum_r, %l1) !sum, each pass of loop may update
8 define(max_r, %l2) !max, cmp to sum, store in max if larger
9
10 .global main
11 main:
12 save %sp, -64, %sp
13
14 ba loop_test
15 mov lwr_b, x_r /*init x_r = -2 */
16
17 loop_test:
18 cmp x_r, upr_b
19 ble sum_loop
20 nop
21 /*then x > upr_b and the max has been found*/
22 /*odd spot for it...but this is the end of the program*/
23
24
25 sum_loop: ! starting backwards to give us an intial nonzero constant sum
26 mov -64, sum_r /* sum = -64 */
27
28 mov x_r, %o0 /*56x*/
29 mov 56, %o0
30 clr %o2
31 call .mul /*AFAIK 56x should now be in %o0*/
32 nop
33 add sum_r, %o0, sum_r /* sum = 56x-64 */
34
35 mov x_r, %o0 /* 14x^2 */
36 mov x_r, %o1
37 mov -14, %o2
38 call .mul
39 nop
40 add sum_r, %o0, sum_r /* sum = -14x^2+56x-64 */
41
42 mov x_r, %o0
43 mov x_r, %o1
44 mov x_r, %o2
45 call .mul
46 nop
47 add sum_r, %o0, sum_r /*sum = x^3-14x^2+56x-64 */
48
49 add x_r, 1, x_r /* x++ */
50 cmp sum_r, max_r
51 bge collect_lrg /*branches if sum > max*/
52 nop
53
54 collect_lrg:
55 mov sum_r, max_r
56 ba loop_test
57
58 mov 1, %g1 /*exit request*/
59 ta 0 /*trap to system*/
次に、マクロを定義してコンパイルしようとすると、次のようになります。
cs32107@matrix:~$ m4 polynomialv2.m > polynomial.s
cs32107@matrix:~$ gcc -g polynomial.s -o 多項式
ld: 致命的: 再配置エラー: R_SPARC_32: ファイル /var/tmp//ccVOrnx2.o: シンボル: オフセット 0xfb5d11dd はアライメントされていません ld: 致命的: 再配置エラー: R_SPARC_32: ファイル /var/tmp//ccVOrnx2.o: シンボル:オフセット 0xfb5d120f は非整列 ld: 致命的: 再配置エラー: R_SPARC_32: ファイル /var/tmp//ccVOrnx2.o: シンボル: オフセット 0xfb5d1215 は非整列 ld: 致命的: 再配置エラー: R_SPARC_32: ファイル /var/tmp// ccVOrnx2.o: シンボル: オフセット 0xfb5d1219 はアライメントされていません ld: 致命的: 再配置エラー: R_SPARC_32: ファイル /var/tmp//ccVOrnx2.o: シンボル: オフセット 0xfb5d121d はアライメントされていません ld: 致命的: 再配置エラー: R_SPARC_32: ファイル/var/tmp//ccVOrnx2.o: シンボル: オフセット 0xfb5d1266 はアラインされていません collect2: ld は 1 つの終了ステータスを返しました cs32107@matrix:~$