下へ
>  2013/10/28 (月) 00:35:09        [qwerty]
> > 答えになってないかも知れないけど
> > インテル系のコンパイラなら相応に
> > モトローラ系のコンパイラでも相応に
> > それぞれ正しいコードは吐いてくれるんじゃないかな
> > 要はソース上で正しく型キャスト処理を書くことだ
> コンパイラはエンディアンに依存するらしい(;´Д`)
> てかリトルでもビッグと同じ順な配列で処理されてるから問題はないと判断するよ
> クシコ

つか素直にアセンブラ書けよチンカス(;´Д`)

参考:2013/10/28(月)00時27分07秒

>  2013/10/28 (月) 00:27:07        [qwerty]
> > byte[]をbyte*にしてそれをuint*で32ビットブロック単位にして処理してって感じなんだけど
> > リトルエンディアンでは問題ないっぽいってことはBSWAP相当の処理はされてないって感じでいいのかな
> > 問題は無いと思うんだけどモトローラ系の環境がないのでテストできん
> > (;´Д`)
> 答えになってないかも知れないけど
> インテル系のコンパイラなら相応に
> モトローラ系のコンパイラでも相応に
> それぞれ正しいコードは吐いてくれるんじゃないかな
> 要はソース上で正しく型キャスト処理を書くことだ

コンパイラはエンディアンに依存するらしい(;´Д`)
てかリトルでもビッグと同じ順な配列で処理されてるから問題はないと判断するよ
クシコ

参考:2013/10/28(月)00時24分13秒

>  2013/10/28 (月) 00:24:13        [qwerty]
> > あくまでもポインタを unsigned char * で宣言しておけば
> > おそらくは大丈夫です
> > 心配ならテストルーチンを書いてprintfで結果を確認しておくと吉かと
> byte[]をbyte*にしてそれをuint*で32ビットブロック単位にして処理してって感じなんだけど
> リトルエンディアンでは問題ないっぽいってことはBSWAP相当の処理はされてないって感じでいいのかな
> 問題は無いと思うんだけどモトローラ系の環境がないのでテストできん
> (;´Д`)

答えになってないかも知れないけど
インテル系のコンパイラなら相応に
モトローラ系のコンパイラでも相応に
それぞれ正しいコードは吐いてくれるんじゃないかな
要はソース上で正しく型キャスト処理を書くことだ

参考:2013/10/28(月)00時20分33秒

>  2013/10/28 (月) 00:20:33        [qwerty]
> > byte*をuintでキャストして+4ずつループさせて、たとえばXORとったとしても
> > uintにキャストしただけなのでbyte*の並びは変わらないという認識でいいのかな?(;´Д`)
> > あんまり深く考えたことないので躓いた
> あくまでもポインタを unsigned char * で宣言しておけば
> おそらくは大丈夫です
> 心配ならテストルーチンを書いてprintfで結果を確認しておくと吉かと

byte[]をbyte*にしてそれをuint*で32ビットブロック単位にして処理してって感じなんだけど
リトルエンディアンでは問題ないっぽいってことはBSWAP相当の処理はされてないって感じでいいのかな
問題は無いと思うんだけどモトローラ系の環境がないのでテストできん
(;´Д`)

参考:2013/10/28(月)00時16分46秒

>  2013/10/28 (月) 00:16:46        [qwerty]
> > そもそもendianの話は処理系つうかCPUに依存する話なので
> > ptr++; な場面でポインタが+1されるか+4されるかが不安みたいな質問やと思う
> byte*をuintでキャストして+4ずつループさせて、たとえばXORとったとしても
> uintにキャストしただけなのでbyte*の並びは変わらないという認識でいいのかな?(;´Д`)
> あんまり深く考えたことないので躓いた

あくまでもポインタを unsigned char * で宣言しておけば
おそらくは大丈夫です
心配ならテストルーチンを書いてprintfで結果を確認しておくと吉かと

参考:2013/10/28(月)00時08分21秒

>  2013/10/28 (月) 00:11:10        [qwerty]
> バイト配列を一個ずつ処理すると遅いので
> uint*でキャストしてuint単位で処理したいんだがendianの扱いとかどうなるんだ?(;´Д`)

union使おうぜとか適当な事を言っておくか(;´Д`)

参考:2013/10/27(日)23時54分10秒

>  2013/10/28 (月) 00:08:21        [qwerty]
> > SIMD使おうぜ
> そもそもendianの話は処理系つうかCPUに依存する話なので
> ptr++; な場面でポインタが+1されるか+4されるかが不安みたいな質問やと思う

byte*をuintでキャストして+4ずつループさせて、たとえばXORとったとしても
uintにキャストしただけなのでbyte*の並びは変わらないという認識でいいのかな?(;´Д`)
あんまり深く考えたことないので躓いた

参考:2013/10/28(月)00時01分15秒

>  2013/10/28 (月) 00:05:21        [qwerty]
> > SIMD使おうぜ
> そもそもendianの話は処理系つうかCPUに依存する話なので
> ptr++; な場面でポインタが+1されるか+4されるかが不安みたいな質問やと思う

そこはエンディアンを気にする前に通過しておくべきだろ(;´Д`)

参考:2013/10/28(月)00時01分15秒

>  2013/10/28 (月) 00:01:15        [qwerty]
> > バイト配列を一個ずつ処理すると遅いので
> > uint*でキャストしてuint単位で処理したいんだがendianの扱いとかどうなるんだ?(;´Д`)
> SIMD使おうぜ

そもそもendianの話は処理系つうかCPUに依存する話なので
ptr++; な場面でポインタが+1されるか+4されるかが不安みたいな質問やと思う

参考:2013/10/27(日)23時58分54秒

>  2013/10/27 (日) 23:58:54        [qwerty]
> バイト配列を一個ずつ処理すると遅いので
> uint*でキャストしてuint単位で処理したいんだがendianの扱いとかどうなるんだ?(;´Д`)

SIMD使おうぜ

参考:2013/10/27(日)23時54分10秒

>  2013/10/27 (日) 23:56:53        [qwerty]
> バイト配列を一個ずつ処理すると遅いので
> uint*でキャストしてuint単位で処理したいんだがendianの扱いとかどうなるんだ?(;´Д`)

難しく考えなくても
普通に (unsigned int)foo[i] みたいに書けばいいし
そもそも最初からunsigned int型の配列にしておいて
保存などの時だけ (unsigned char)foo[i] にすればいい

参考:2013/10/27(日)23時54分10秒

2013/10/27 (日) 23:54:10        [qwerty]
バイト配列を一個ずつ処理すると遅いので
uint*でキャストしてuint単位で処理したいんだがendianの扱いとかどうなるんだ?(;´Д`)

上へ