ld2 {v0.4s, v1.4s}, [x15]
여기서 [x15]는 알겠는데, 나머지는 정확히 모르겠네요. 물론 LD라는 걸로 봐서는 Load일것 같고 [x15]에서 읽어서 v0로 넣으라는 건 대강 알겠습니다만... 이번 기회에 한번 제대로 알아봐야겠어요. 사실 디버깅 하다 보면 이런 인스트럭션도 자주 만나게 되거든요.
먼저 ld2가 무엇인지 찾아봅니다. ARM reference 사이트에는 이렇게 나와있습니다.
LD2 (vector, single structure)
Load single 2-element structure to one lane of two registers.
LD2 {
Vt
.S, Vt2
.S }[index
], [Xn|SP
] ; 32-bit
설명을 보니 추즉했던 대로 [x15]에서 값을 읽어서, {v0.4s, v1.4s}에 넣는다는 거네요?
근데 v0.4s 랑 v1.4s는 또 뭘까요? 보통 LDR 인스트럭션이었다면 이부분에 register 가 왔을테니깐, register 일텐데, x15같은 generic purpose register는 아니고, 정확히 무엇을 가르키는지 모르겠네요.
그래서 다시 v0.4s 가 무엇인지 찾아봅니다. ARM reference사이트에서 이 페이지가 유용한 정보를 갖고 있네요.
오호라, 이 문서를 읽어보니깐, Vt 어째고 하는 것은 Vector register를 가리키는 것이고, 뒤에 오는 4s 라는 것은 해당 Vector register를 4개짜리 32bit element로 나눈 것을 가리키는 말이네요.
그럼 정리해보면, 결국 이 인스트럭션은 [x15]에서 값을 읽어서 V0과 V1의 각각 4개씩 32bit element로 복사하는 것이군요. 다시 말하자면, [x15]에서 값을 읽어서 128bit씩 V0과 V1에 복사하게 됩니다.
뭐 별로 어렵지는 않네요.
댓글 없음:
댓글 쓰기