[アセンブリ] sファイルの改良 printf

[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE]

cppファイルから作成したsファイルについて素人目線で無駄と思える行を削除、メモリ番地を勝手に節約してみました。

下記コードでも一応動きました。スタックポインタを32番地マイナスの位置に移動するところを16番地に、フレームポインタ他をスタックポインタ+16番地に格納するところを+8番地に変更しています。

副作用は不明です。

	.section	__TEXT,__text,regular,pure_instructions
	.build_version macos, 11, 0	sdk_version 12, 1
	.globl	_main                           ; -- Begin function main
	.p2align	2
_main:                                  ; @main
	.cfi_startproc
; %bb.0:
	sub	sp, sp, #16                    ; スタックポインタ(sp)から16番地減算してspに格納
	stp	x29, x30, [sp, #8]             ; fp(x29)とlr(x30)をsp+8番地に格納 
	.cfi_def_cfa_offset 32
	.cfi_offset w30, -8
	.cfi_offset w29, -16
	;mov	w8, #0                          ; 0をw8へコピー(削除)
	;str	w8, [sp, #8]                    ; 0をsp+8番地に格納(削除)
	;str	wzr, [sp, #12]                  ; 0をsp+12番地に格納(削除)
	adrp	x0, l_.str@PAGE             ; x0にl_.str@PAGEを書き込み
	add	x0, x0, l_.str@PAGEOFF          ; x0にl_.str@PAGEOFFを追記
	bl	_printf                         ; printfを呼び出し
	mov	w0, #0                          ; 0をw0へコピー(初期化)
	ldp	x29, x30, [sp, #8]             ; sp+8の値をfp,lrに読み込む(元に戻す)
	add	sp, sp, #16                     ; スタックポインタ(sp)から16番地加算してspに格納
	ret
	.cfi_endproc
                                        ; -- End function
	.section	__TEXT,__cstring,cstring_literals
l_.str:                                 ; @.str
	.asciz	"\343\203\206\343\202\271\343\203\210"

.subsections_via_symbols

; SP他の番地移動単位は8の倍数にしないとエラーになる
;asm/test.s:9:21: error: index must be a multiple of 8 in range [-512, 504].
; stp x29, x30, [sp, #2] ; fp(x29)とlr(x30)をsp+2番地に格納
;asm/test.s:20:21: error: index must be a multiple of 8 in range [-512, 504].
; ldp x29, x30, [sp, #2] ; sp+16の値をfp,lrに読み込む(元に戻す)
;make: *** [obj/test.o] Error 1
#include <stdio.h>

int main() {

    printf("テスト");

    return 0;
}