Endianness dari iPhone?

10

Saya tahu iPhone (dan iPad) berjalan pada prosesor ARM, yang secara default adalah little-endian (dan iOS sendiri adalah little-endian menurut halaman Wikipedia); namun, prosesor ARM konon memiliki kemampuan untuk beralih antara little-endian dan big-endian. Seberapa mungkin ini dan bagaimana cara kerjanya?

slartibartfast
sumber
1
Bagaimana jawaban untuk pertanyaan ini bermanfaat untuk menyelesaikan masalah atau meningkatkan pengalaman Anda menggunakan iPhone? Jika ini membahas masalah dunia nyata dari pengguna akhir yang bukan pengembang, tidak masalah seberapa teknisnya, tetapi jika pertanyaannya hanya menarik bagi pengembang, itu di luar topik di sini.
Daniel
Oke, lalu haruskah saya memindahkannya ke stackoverflow?
slartibartfast
2
@myrkos Or superuser.com
Dan J
6
Mari kita pertajam pertanyaannya terlebih dahulu. Kami sedang mencari pertanyaan pendek yang mengundang jawaban panjang. Ini berlaku untuk semua situs. SuperUser bukan tempat untuk pertanyaan iOS apa pun secara umum. Kami adalah tempat terbaik untuk pertanyaan perangkat keras di iOS. Jika Anda memiliki masalah pemrograman tertentu, maka ajukan pertanyaan itu dan jelaskan bagaimana endianness perangkat keras iOS memengaruhi pertanyaan pemrograman spesifik Anda akan menjadi cara untuk pergi [SO dan bukan di sini adalah forum dalam kasus itu]. Jika Anda menginginkan perspektif pengguna tentang masalah ini, sulit untuk melihat situs apa pun sebagai tempat yang lebih baik untuk menampung pertanyaan itu daripada di sini.
bmike
2
"ARM sedikit-endian, arsitektur RISC 32-bit yang banyak digunakan oleh perangkat mobile. Harus membuat catatan kecil di sini: ARM adalah bi-endian (biasanya, jika Anda mau); Anda dapat mengganti endianness dari level terendah. Kebetulan iOS menggunakannya sebagai little endian, sepertinya saya ingat chip baseband (yang juga merupakan core ARM, setidaknya dengan iPhone asli - tidak pernah berurusan dengan yang lain) menjadi big endian, sebenarnya. Sayangnya, Anda bisa dapat melakukan ini pada tingkat per-proses, IIRC, seperti yang Anda bisa dengan PowerPC (huuuuge besar untuk emulator). " news.ycombinator.com/item?id=1527676
0x6A75616E

Jawaban:

6

bahkan jika Anda berpikir Anda tidak perlu mengetahui endianness yang mungkin dilakukan seseorang. Tidak perlu menjelaskan mengapa seseorang tidak membutuhkannya karena Anda mungkin tidak tahu konteksnya. Pertanyaannya bukan "apakah saya perlu tahu endianness" melainkan "apakah endian besar atau kecil". Jadi, berkonsentrasilah pada subjek!

Setelah mengatakan bahwa mungkin itu adalah praktik terbaik jika kita tidak menemukan kembali roda dan hanya mengandalkan makro yang disediakan Apple untuk ini. Alasannya adalah karena mereka telah menghabiskan cukup banyak waktu untuk mengoptimalkan makro ini dan memastikan bahwa itu berfungsi baik dengan simulator maupun pada Mac, iPhone dan semua OS dan perangkat keras mereka.

Jika Anda menggali apa yang terjadi ketika Anda memohon CFSwapInt16BigToHostAnda mungkin dapat melihat komentar yang menyarankan makro ini memproduksi mungkin kode mesin terbaik yang bisa Anda dapatkan dengan bantuan optimisasi kompiler:

OS_INLINE
uint16_t
_OSSwapInt16(
    uint16_t        data
)
{
  /* Reduces to 'rev16' with clang */
  return (uint16_t)(data << 8 | data >> 8);
}

OS_INLINE
uint32_t
_OSSwapInt32(
    uint32_t        data
)
{
#if defined(__llvm__)
  data = __builtin_bswap32(data);
#else
  /* This actually generates the best code */
  data = (((data ^ (data >> 16 | (data << 16))) & 0xFF00FFFF) >> 8) ^ (data >> 8 | data << 24);
#endif

  return data;
}
trudnai
sumber
3

Endianness bukanlah sesuatu yang berinteraksi dengan pengguna akhir - tetapi di sini ada ringkasan 10.000 kaki tentang apa artinya ini bagi pengguna produk Apple.

Singkatnya - endianness untuk prosesor internal sama dengan arah penulisan untuk suatu bahasa. Ketika Anda melihat huruf-huruf teks bahasa Inggris, kita semua sepakat untuk memulai dari kiri atas dan membaca dulu lalu turun. Bahasa lain mulai dari kanan dan membaca ke kiri dan beberapa bahkan membaca dulu sebelum pindah ke kiri atau ke kanan .

Tidak terlalu penting bagi pengguna jika bit dalam representasi internal suatu alamat atau nomor disimpan sedikit endian atau big endian. Bahkan OS X pada Mac mematuhi representasi big-endian dan iOS mematuhi pemesanan little-endian . Fakta ini tidak berarti bahwa kedua perangkat tidak dapat bekerja bersama dengan benar. Ini berfungsi karena representasi ini hanya terjadi secara internal dan tidak terkena kami sebagai pengguna.

bmike
sumber
10
OSX pada PowerPC adalah Big Endian, pada Intel itu adalah Little Endian.
zaph