5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

GCCについて part9

1 :デフォルトの名無しさん:2009/06/27(土) 08:34:50
史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。

GNU本家のGCCページ
http://gcc.gnu.org/

Binutils - Collection of binary utilities ←これも必要だぞ。
http://www.gnu.org/directory/GNU/binutils.html

GNU Binutils
http://sources.redhat.com/binutils/

GCC online documentation
http://gcc.gnu.org/onlinedocs/

Installing GCC
http://gcc.gnu.org/install/

GCC Timeline
http://gcc.gnu.org/releases.html#timeline

Calendar
http://gcc.gnu.org/develop.html#timeline

前スレ
GCCについて part8
http://pc12.2ch.net/test/read.cgi/tech/1192201659/l50

2 :デフォルトの名無しさん:2009/06/27(土) 23:54:04
おつ


3 :デフォルトの名無しさん:2009/06/28(日) 01:06:56
>>1


4 :デフォルトの名無しさん:2009/06/28(日) 14:46:01
  /|            
 //||             
    ||         /( (・゚))
  . |:|       //
 . | |       | |                  |
  | |        |. |                 .||
  | |      / |     , _____    .||
  | |      /  |     / ____  /   .||
  | |      /.   |   / /    / /     |:|
  | ||     | -‐-|   / /    / /      | | 
  | ||\   /   /   / /    | |____/ .|
  | :| \ \/    |   / /     \.______/
  | |  \      ゝノ /
  | |  /)       /
 . .|| / /       |
   | (_/       \
     /   /⌒\  \
    (___/    \__)


5 :デフォルトの名無しさん:2009/06/28(日) 14:51:27
>>4
ミギーか。
懐かしい。



6 :デフォルトの名無しさん:2009/06/28(日) 14:54:59
    ._
     \            、・、                  .,
  .  . .`、            、`・、        .       .,
     .   \             .`・x、            .,       .‐ヤTTTTTTTTTTTTTT_ニ‐!
    .    .\              、`ー、_   .   .   .i                  _.‐“゜
          \               、`・、        }               _.‐“´
            ヘ_    .    .   .   ./    .   .i      .      、、・゛
           ._.^   .   .   .   ._.″    .   、}   .   .  .  ._.^             、
        ゙_.・´   .   .   .  ._.・′         、i       .    ノ゜              ゙’
   .  ._.・^    .    .   ._、‐?´    .    .    .′        ゙/`               、1
 . . ..ヤ´      .      、・^`                         .(_                 ,
                .               .               .`¨“〜-=.、_        ._.
                                     .                  `¨“?〜---・^`

7 :デフォルトの名無しさん:2009/06/29(月) 13:17:44
空気読まずに質問です。
ググってみたが解決策が見つからないです。ヒントをください。

const short x_limit_min[8] = {i, i-1, i-2, i-3, i-4, i-5, i-6, i-7};
__asm__ volatile (
 :
" movdqu %[x_limit_min], %%xmm3 ¥n¥t"
 :
:: ..., [x_limit_min] "m" (x_limit_min), ...
: ... );

こう書いてみたところ、(Xは数字)
error: memory input X is not directly addressable
と警告されてしまう。
ローカル配列のアドレスを渡すだけなので
:: [x_limit_min] "m" (&x_limit_min)
としてみても、同じエラーだった。どうするのが正解でしょう?


8 :デフォルトの名無しさん:2009/06/29(月) 13:57:07
>>7
x_limit_minのポインタをレジスタに入れて間接アドレッシングで書いてみたら?

9 :デフォルトの名無しさん:2009/06/30(火) 04:44:30
Mac OS Xのgccってgccのホームページからソースをダウンロードしてコンパイルして
置き換えてしまっても大丈夫なのでしょうか?

10 :デフォルトの名無しさん:2009/06/30(火) 05:15:54
age質問でマカー。
おまけにスレ違い。最悪だよな。

11 :デフォルトの名無しさん:2009/06/30(火) 10:23:33
スルーできないのがドザ

12 :デフォルトの名無しさん:2009/06/30(火) 11:50:01
>>9
マジレスすると、No。

MacOS Xについているgccは、Apple Extensionがいくつか
入っている。だから、置き換えるんじゃなくて別のパスに
バイナリを置いて、環境変数CCとかにフルパスを埋め込んで
きりかえる。例えば、/opt/local/bin/とか/usr/local/bin/とか。

Xcodeがデフォルトでgcc4.0.1と4.2.1、llvm-gccを入れるけど、
MacPortからすっぴんgccをバージョン指定で落としてきて入れるっ
てのが可能らしい。試したことは無いけど。

13 :デフォルトの名無しさん:2009/06/30(火) 20:29:22
マカーウゼー

14 :7:2009/06/30(火) 20:32:48
>13
まあまあ。Appleのllvmとかclangへの貢献度は高いと思うし。

>8
解決しました。vectorを使ってあげればそのまま行けました。こんな感じです。
v8hi x_limit_min = {i, i-1, i-2, i-3, i-4, i-5, i-6, i-7};



15 :デフォルトの名無しさん:2009/06/30(火) 20:50:48
>>9
>>12が言ってるが、フレームワークをリンクしたりするなら止めたほうがいい。
binutils相当がかなり違うし、GCC自体も独自拡張の部分が多いから。
gccのmanページで"APPLE ONLY"を検索してみると違いがよく分かる。

16 :デフォルトの名無しさん:2009/06/30(火) 21:21:30
ドザよりよっぽどgccに近いところにいると思うんだ。

mac使ったことないけど。

17 :デフォルトの名無しさん:2009/07/01(水) 03:07:10
それは無い。
次の無かったNeXTならともかくw

結局、Solarisに成る前のSUNが一番良かったな。

18 :デフォルトの名無しさん:2009/07/01(水) 05:15:07
AppleがFSFに協賛してるなんて初耳だ。
Mac OSってGPLなの?
コンパイラ作る技術が無いから利用してるだけでしょ。

19 :7:2009/07/01(水) 05:39:33
>>18
んなこたあない。

http://arstechnica.com/apple/news/2007/03/apple-putting-llvm-to-good-use.ars

OpenCL、CUPS、WebKitとか、それなりにOpenSourceな世界にも貢献
してる。パッチも投げてるし、別におかしくないかと。


20 :デフォルトの名無しさん:2009/07/01(水) 06:29:24
>>19
いや、結構オープンソース嫌いなイメージがあるのだが。
当てつけのように暗号化したりして邪魔してるじゃん。


21 :デフォルトの名無しさん:2009/07/01(水) 07:27:00
>>18
http://www.opensource.apple.com/

技術がどうとかよりNeXT時代からGCCベースだし、ObjC/ObjC++サポート以外
にもGCCに様々な貢献をしていると思うが。
変な独自コンパイラを作られるよりGCCの方がずっと良いと思う。

22 :7:2009/07/01(水) 08:29:40
>>20

「当てつけのように暗号化」の話は はつみみです。
そーすよろ。

23 :デフォルトの名無しさん:2009/07/01(水) 08:39:12
OS Xはしばらくの間ソース公開してたよな。

24 :デフォルトの名無しさん:2009/07/01(水) 13:17:34
>>19
自分とこでも動くようにパッチ投げてるだけで、最初のソース本体を
GPLで公開してない。それどころか自社独自ハードのデバドラは
ソース非公開だし。そこに挙がってるような上っ面のソフトなんて、
別にソース公開してくれなくても、見た目が似たようなのは幾らでも
作れる。必要なのはハードウェアのデバドラをOSS化すること。

そもそもOS X 自体を再コンパイル出来ないし。

>>21
GCCは利用するが、貢献はしてない。むしろあからさまにGPLを
成果物から避けてる。Takeはするけど、Giveはしない。

>>22
voidウザい。

25 :デフォルトの名無しさん:2009/07/01(水) 13:24:24
Apple Public Source Licenseとか、CDDLなSunやMS-PLなMicrosoftと同じ穴の狢。

26 :デフォルトの名無しさん:2009/07/01(水) 13:28:24
>>24 がうわっつらだけしか見てない奴ということはよくわかった。

27 :デフォルトの名無しさん:2009/07/01(水) 13:38:07
最近のアップルの独自ハードなんてiPhone/iPodTouchのARM SoCくらいで後は汎用部品ばかりじゃないか

28 :デフォルトの名無しさん:2009/07/01(水) 13:39:14
見てないではなく、>>24は「何も知らない」が適当だな

GCCへの貢献が無いだとか、嘘もいいところだ

29 :デフォルトの名無しさん:2009/07/01(水) 16:19:51
上に貼られているリンクみればDarwinのコード落とせるのにね。

30 :デフォルトの名無しさん:2009/07/01(水) 16:22:56
カーネル部分だけでなくお望みの各種デバイスドライバのソースも
置いてあるのにな

31 :デフォルトの名無しさん:2009/07/01(水) 19:29:49
米IBMらがオープンソースマシン学習コンパイラを発表――開発時間を短縮
http://sourceforge.jp/magazine/09/07/01/0714255
>GCCをインタラクティブなマシン学習対応研究ツールに変換する「Milepost Framework」を利用、それぞれの設定に応じてコンパイラを開発することなく、自動的に最適化するコンパイラを生成する。
>ターゲットアーキテクチャ向けにアプリケーションを迅速にチューニングするため、再設定して構築するシステムの開発期間を短縮できるという。
>「IBM System p」で行った組み込みアプリケーションのベンチマークテストでは、性能が平均18%改善されたという。

まーたこの人誤訳してそうだなぁ…。

32 :デフォルトの名無しさん:2009/07/01(水) 20:38:00
「機械学習」で成語だよなぁ

33 :デフォルトの名無しさん:2009/07/01(水) 20:41:26
>>24
>Takeはするけど、Giveはしない。

Give を強要するのがオープンソースじゃないでしょ。
それに、Apple 由来のソースコードは沢山見掛けるよ。

俺は意識的に GPL 物を避けてるけど、ライセンスの選択は
プログラマの自由だから他人にとやかく言われたくないし。

34 :デフォルトの名無しさん:2009/07/01(水) 21:44:00
マカーってDarwinを免罪符にしてるけど、DarwinはMac OS Xじゃないんだけどね。
貢献しているっていうなら、Darwinじゃなく、Mac OS XをGPLで配布すればいいじゃん。
MSもアップルもSUNも同じ穴の狢で、ただの独占を狙ってる企業って事実を認識しろよ。

35 :デフォルトの名無しさん:2009/07/01(水) 21:55:35
クレクレ君乙。
穴の見分けもつかない奴が同じ穴の狢とか言ってんなよw

CDDL は『GPL がコンフリクトを起こしている』だけで、
オープンソースライセンスとしては何の問題も無いぞ。
現に BSDL な環境に持って行っても問題は出ていないし。

36 :デフォルトの名無しさん:2009/07/01(水) 22:16:50
どこまで馬鹿なんだ?
「GCCに貢献してない」と言い出したのはテメーだろうが
それを論破されたからと言って無関係な事を言い出すなよ、気違いが

37 :デフォルトの名無しさん:2009/07/01(水) 22:23:39
>>34
もういいです。Appleとまかが死ぬほど嫌いなのは良くわかりました。
お願いですからトリップつけてください。あぼーんするから。

38 :デフォルトの名無しさん:2009/07/01(水) 23:14:33
その昔、MS相手にAppleがルックアンドフィールで訴訟を仕掛けたことを理由に
RMSがAppleをdisって以来の筋金入りのRMS信者かなw

39 :デフォルトの名無しさん:2009/07/01(水) 23:57:48
>>34
禿同!

>>36
違う違う。それ俺。

とにかくマカーが狂ってるのは分かったから>>37
トリップ付けろ。アボーンするから。<言い出しっぺの法則

40 :デフォルトの名無しさん:2009/07/02(木) 00:01:30
分裂したw

41 :デフォルトの名無しさん:2009/07/02(木) 05:22:04
貢献してねーじゃん(w
論破とか言って勝利宣言かよ。
マカー的には「アップルはgccに多大な貢献しているから多少のスレチは
我慢しろボケ」ってことかよ。意味わかんねー。

42 :デフォルトの名無しさん:2009/07/02(木) 06:31:18
そういえば昔 NeXT を寄贈してたのってキヤノンだっけ? NeXT 社?

43 :デフォルトの名無しさん:2009/07/02(木) 08:04:41
>>41
糞レスしてる暇あったらGCCのChangeLog見てみろよ
ソースも無しに貢献してないしてないとわめくなクソガキが

44 :デフォルトの名無しさん:2009/07/02(木) 09:13:45
そういや RMS が MIT の AI ラボを借りるときスティーブ・ジョブズが口利きしたっていう
話。 ttp://journal.mycom.co.jp/special/2004/gnu/004.html
こういう貢献もあるってことで。

>>38
この頃はジョブズは NeXT で Apple に居なかったのでルック&フィール訴訟は関係なく、
現在ジョブズ信者である分には RMS 信者と対立しないとかw

45 :デフォルトの名無しさん:2009/07/02(木) 20:15:58
>43
そのとおりですね。

パッチポストしてる人のメールアドレス見てみれば
>41とか>39とかがおばかさんなのは良くわかります。
きっと39とか41とかはchangelogもMLも見たことさえ
ないのでしょう。

46 :デフォルトの名無しさん:2009/07/02(木) 21:11:14
じゃあ、gccに多大な貢献をしているApple関係のすれ違いは容認ってことで。
今からAppleスレね。
gccの話もしてもいいよ。

47 :デフォルトの名無しさん:2009/07/02(木) 21:20:11
gccとか書いてる時点で馬鹿確定だな

48 :デフォルトの名無しさん:2009/07/02(木) 21:56:33
自己紹介は良いから(w

49 :デフォルトの名無しさん:2009/07/03(金) 13:29:28
次のようなプログラムをgcc(3.3.5, 4.4.0)でコンパイルするとハネられます。
PGIやwindows SDKのコンパイラなら問題なく通るのだけど、なにか間違ってる?

T::size_type is parsed as a non-typeとか言ってくるし。
でも、
void func(const T&) [with T=std::vector<double, std::allocator;double> >]と、Tがvector型だとわかってインスタンス化してるんですがねぇ。
当然、vector<double>::size_typeは存在するのでテンプレートとして書かなければgccでも通ります。
バグ?

#include <iostream>
#include <vector>

using namespace std;

template <class T>
inline void func(const T& a)
{
T::size_type length = a.size();
cout << length << endl;
}

int main(int argc, int argv)
{
vector<double> a(5);
func(a);

return 0;
}


50 :デフォルトの名無しさん:2009/07/03(金) 13:32:43
T::size_typeが一見して型名だとは解らないため (enum定数とかstatic変数かも)
typename T::size_type としてみれ

51 :デフォルトの名無しさん:2009/07/03(金) 13:32:58
>>49
http://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
> You must now use the typename and template keywords to disambiguate dependent names, ...

52 :デフォルトの名無しさん:2009/07/03(金) 13:54:30
さんくす
lengthの定義のところにtypenameを入れたら通りました。
C++って元からそんな仕様だったっけ?
まあ通ったからいいや。

53 :デフォルトの名無しさん:2009/07/03(金) 23:20:26
そういう仕様です。

54 :デフォルトの名無しさん:2009/07/03(金) 23:36:16
環境→OS:Fedora11 gccのバージョン:gcc 4.4.0

GEANT4というシュミレーションコードのコンパイルがうまくいかず、困っています。
3ヶ所ほどコンパイル中にエラーが出ていて、2つは潰したのですが…
最後に残った

Compiling G4ScoreLogColorMap.cc ...
src/G4ScoreLogColorMap.cc: In member function 'virtual void G4ScoreLogColorMap::DrawColorChartText(G4int)':
src/G4ScoreLogColorMap.cc:157: error: 'sprintf' is not a member of 'std'
gmake[2]: *** [/home/xxxxxxxxxxxxx/geant4/tmp/Linux-g++/G4detutils/G4ScoreLogColorMap.o] エラー 1

というエラーが取り除けなくて困っています。
読み込んでいるヘッダーがおかしいんだろうなぁとは思うのですが…
ネットで調べて、色々読み込んでみました。
(1) ttp://www.drk7.jp/MT/archives/001498.html
ここを参考に…(ここはatoiが読み込めませんと出ていた。)
#include <cstdlib>
#include <cstring>
(2) ttp://code.google.com/p/pyminuit/issues/detail?id=8
を参考にして…
#include <algorithm>
(3) ttp://simd.jugem.jp/?eid=73
を参考にして、また、c++がcを下位互換でサポートしている事を踏まえて
#include <stdio.h>

これだけ加えてみましたが、同じエラーが続いています。
どのヘッダーに含まれているのか、ご存知の方いらっしゃいましたら、ご教示いただけませんか?
宜しくお願いいたします。

55 :デフォルトの名無しさん:2009/07/03(金) 23:45:05
<cstdio>

56 :54:2009/07/03(金) 23:47:06
>>55
本当にありがとうございます!解決しました!

57 :デフォルトの名無しさん:2009/07/16(木) 06:54:06
標準のINCLUDE PATHは変えられないのですか?

自分のHOMEにライブラリをインストールしたのですが、コンパイル時には
システムに標準で入っている古いライブラリのヘッダを観に行ってしまって
失敗するようです。
/usr/localを見ないようにはできませんか?

58 :デフォルトの名無しさん:2009/07/16(木) 09:52:14
>>57
-I-

59 :デフォルトの名無しさん:2009/07/16(木) 11:36:33
普通に見ない

60 :デフォルトの名無しさん:2009/07/16(木) 15:01:16
-isystem

61 :デフォルトの名無しさん:2009/07/18(土) 03:22:21
gccのオプションで -mtune と -march の違いって何ですか?

62 :デフォルトの名無しさん:2009/07/18(土) 03:27:36
man gcc

63 :デフォルトの名無しさん:2009/07/18(土) 03:40:41
ありがとう
ググって解決しました

64 :デフォルトの名無しさん:2009/07/23(木) 20:30:20
4.4.1

65 :デフォルトの名無しさん:2009/07/24(金) 18:25:36
http://www.jp.kernel.org/pub/GNU/gnu/gcc/gcc-4.4.1/

66 :デフォルトの名無しさん:2009/08/01(土) 17:02:45
gcc 4.4を使うとGPL強制されるので使っちゃダメです

67 :デフォルトの名無しさん:2009/08/01(土) 17:21:13
夏だなぁ

68 :デフォルトの名無しさん:2009/08/01(土) 19:39:47
gccがパブリックドメインになるのは50年後です

69 :68:2009/08/01(土) 19:52:06
間違えた、著者の死後50年だよね。

70 :デフォルトの名無しさん:2009/08/01(土) 20:02:18
著作権についてロクに知らない馬鹿だな。

保護期間が50年なのは財産権であって、人格権は含まれない。

パブリックドメインは人格権に相当するものも含めパブリックと解される。

71 :デフォルトの名無しさん:2009/08/01(土) 20:26:15
人格権は日本では相続不可。保護期間は死後0年まで。

72 :デフォルトの名無しさん:2009/08/01(土) 20:38:51
116条

73 :デフォルトの名無しさん:2009/08/04(火) 20:44:15
影響しないはずの e_X のコメントの有無で結果が変わ
る。誰か報告してくれ。

#include <stdio.h>

// gcc version 4.2.1 20070719  [FreeBSD]
// gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)

typedef enum {
  // e_X = -1,
  e_a,
} enum_t;

void
foo(enum_t e) {
  printf("e %s\n", e < 0 ? "< 0" : ">= 0");
}

int
main() {
  enum_t e = -1;
  foo(e);
  return 0;
}


74 :デフォルトの名無しさん:2009/08/04(火) 20:56:33
> Each enumerated type shall be compatible with char, a signed integer type, or an
> unsigned integer type. The choice of type is implementation-defined,108) but shall be
> capable of representing the values of all the members of the enumeration.

意訳) enum の型は処理系定義だよ、ただしメンバの値はすべて表現できなければならない

なので、メンバに負の値がなければ、処理系によっては unsigned を選ぶかもしれない
unsigned になった場合は e = -1 は e = (unsigned) -1 のことだから、
なんというか、まぁ、仕方ないんじゃないか

75 :デフォルトの名無しさん:2009/08/04(火) 20:57:19
e_Xがないとeが負とならないと判断して
printf("e %s\n", e < 0 ? "< 0" : ">= 0");

printf("e %s\n", ">= 0");
に最適化されてるみたい。

76 :デフォルトの名無しさん:2009/08/04(火) 21:14:59
>>74
マジか…int とコンパチだと思ってたよ。

77 :デフォルトの名無しさん:2009/08/04(火) 21:16:17
いやでも同一の implementation で揺れるのはどうなの?(w

78 :デフォルトの名無しさん:2009/08/04(火) 21:26:09
コードとかの問題じゃないけど、わかる人いたら回答おね。

GCC4.4を--prefix=/opt --program-suffix=-4.4のOPTで自己ビルドインスコ。
これでいくとlibstdc++.so.6とlibgcc_s.so.1が/opt/lib64ディレクトリにできるんだけど、
問題はコンパイルしたアプリがこれらを参照しないでUbnuntu9.04のGCC4.3とセット物の/usr/lib配下の
物を参照してる。アプリをコンパイル時にLD_RUN_RATHに/opt/lib64をつけても変わらない。

ちなみに/opt/lib64/libstdc++.so.6は/opt/lib64/libstdc++.so.6.0.12へ、/usr/lib/libstdc++.so.6は
/usr/lib/libstdc++.so.6.10へのリンクだからバージョン違ってる・・

/etc/ld.so.confに/opt/lib64を追記すると両方共それを参照するけど、そうなるとシステム全部のアプリが
(Ubuntuのgcc4.3でコンパイルされてる)全部gcc4.4のを読んでしまう(lddコマンドの結果)。
そうなるとよくないですよね。なのでやめました。

実行アプリ毎にLD_LIBRARY_PATHをつける管理が面倒なのでGCC4.4でコンパイルしたアプリも現状の
GCC4.3のlibstdc++とlibgcc_sを読ませておく状態で使用して何か後々問題出る可能性ありますか?

79 :デフォルトの名無しさん:2009/08/04(火) 21:26:54
>>73
アセンブリコード出力して比較してみろよ

80 :デフォルトの名無しさん:2009/08/04(火) 21:34:59
>>78
リンク時に
-Wl,-rpath,/opt/lib64
とかいう話かね?


81 :デフォルトの名無しさん:2009/08/04(火) 21:38:09
>>78
LD_RUN_RATH→LD_RUN_PATH

82 :デフォルトの名無しさん:2009/08/04(火) 21:46:19
>>77
揺れていいみたいだね。

99)An implementation may delay the choice of which integer
type until all enumeration constants have been seen.


83 :デフォルトの名無しさん:2009/08/04(火) 21:47:42
>>80
お、や。もしかしてそれをコンパイル時にコンパイラフラグで渡せばいいのでしょうか。
やってみます^^

>>81
すまそ、タイプミスです。

84 :デフォルトの名無しさん:2009/08/05(水) 00:21:35
>>78
> /etc/ld.so.confに/opt/lib64を追記すると両方共それを参照するけど、そうなるとシステム全部のアプリが
> (Ubuntuのgcc4.3でコンパイルされてる)全部gcc4.4のを読んでしまう(lddコマンドの結果)。
それほんと?埋め込まれたバージョン番号が違うから、そのへん良きに計らってくれると思ったんだけど。

85 :デフォルトの名無しさん:2009/08/05(水) 01:11:13
>>78
そういうもんだ。Ubuntuのg++-4.2も4.3のlibstdc++使ってるし、PPAにある
g++-4.4を入れるとlibstdc++も4.4にアップグレードされる。

86 :デフォルトの名無しさん:2009/08/05(水) 16:46:34
まーlibstdc++のマイナーバージョン違いは気にしなくていいんじゃね?

87 :デフォルトの名無しさん:2009/08/27(木) 18:58:19
-fopenmpだっけ?
あれをつけるのとつけないとで違いってでる?

88 :デフォルトの名無しさん:2009/08/27(木) 23:14:48
pragma omp云々
してないソースだと無意味。

89 :デフォルトの名無しさん:2009/09/03(木) 22:11:25
gcc4.4ってGPL3だから
Windows以外で採用不可能なんだね



90 :デフォルトの名無しさん:2009/09/04(金) 00:12:27
は?

91 :デフォルトの名無しさん:2009/09/04(金) 01:22:03
ひ?

92 :デフォルトの名無しさん:2009/09/04(金) 02:02:51
ふぅ…

93 :デフォルトの名無しさん:2009/09/04(金) 05:53:28
=3

94 :デフォルトの名無しさん:2009/09/04(金) 10:08:46
うほっ

95 :デフォルトの名無しさん:2009/09/10(木) 22:31:17
gcc 4.4.3 releaseの情報をギボンヌ

96 :デフォルトの名無しさん:2009/09/11(金) 09:45:57
gcc-4.4でコンパイルしたオブジェクトとgcc-4.2でコンパイルしたオブジェクトを
リンクするって出来るものなの?

97 :デフォルトの名無しさん:2009/09/11(金) 09:59:01
できる

98 :デフォルトの名無しさん:2009/09/11(金) 11:50:22
libstdc++の微妙な違いにはまったりして。
まあMajorが同じなら大丈夫か。


99 :デフォルトの名無しさん:2009/09/11(金) 13:38:45
>>97
ありがとうございます。やってみたら出来ました。

100 :デフォルトの名無しさん:2009/09/12(土) 08:47:46
別のプラットフォームのプログラムを開発することはできますか?

101 :デフォルトの名無しさん:2009/09/12(土) 09:14:46
GCC クロスコンパイル でぐぐれ

102 :デフォルトの名無しさん:2009/09/12(土) 20:19:01
使ってるレンタル鯖が C/C++ で書いた CGI を使えるって書いてあるんだけど、
シェルは解放してないからクロスコンパイル環境を作って対応したことはある。
(鯖は無料だからその程度の手間は仕方ないんだが。)
最近の GCC ならそんなに難しいことではない。
でも、ライブラリ類はコンパイル済みのをどこかからもってきた方がいいぞ。

103 :デフォルトの名無しさん:2009/09/12(土) 23:55:37
g++ には VC のプリコンパイル済ヘッダみたいな機能はないんですかいの?
boost 使ったソースをコンパイルしようとしたら遅すぎてやっとれんです。


104 :デフォルトの名無しさん:2009/09/13(日) 00:24:16
gccにもpchぐらいあるわい

105 :デフォルトの名無しさん:2009/09/13(日) 00:25:09
あ、ごめん、boostは知らんです…
ccacheで我慢するくらいしか思いつきません

106 :103:2009/09/13(日) 00:38:06
おお、あるのね。どもっす。
とりあえずあとはぐぐってみます。

107 :デフォルトの名無しさん:2009/09/26(土) 23:08:03
すみません質問なのですが,最近vc++からgccに乗り換えたのですが
vc++にある
wmain( int argc, wchar_t *argv[ ])
みたいに引数をwchar_tにすることはできるでしょうか?

108 :デフォルトの名無しさん:2009/09/26(土) 23:13:13
エントリポイントwmainは非標準なので、gccにはない
main関数内でargvをワイド文字列の配列に変換してwmainに渡すという手が有る

109 :デフォルトの名無しさん:2009/09/26(土) 23:15:14
ありがとうございます,それでやってみます.

110 :デフォルトの名無しさん:2009/10/01(木) 18:52:06
質問です。
コンパイルオプションとして-Werrorをつけたいのですが、
実装上どうしても、取り除くことができない警告があります。
この警告だけはWerrorの対象からはずすということができますでしょうか?
もしできるならその方法を教えてください。

111 :デフォルトの名無しさん:2009/10/01(木) 19:29:47
gccのソースをいじる

112 :デフォルトの名無しさん:2009/10/01(木) 20:24:23
>>110
外したい警告がどういう警告なのか書けよ。

113 :デフォルトの名無しさん:2009/10/01(木) 22:47:25
-Whogeで有功になる警告なら-Wno-hogeで無効に出来るだろうし、
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
なんてのもある

114 :110:2009/10/01(木) 23:00:07
>>111-113
返答ありがとうございます。
Werrorの非対象にしたいのは-Wをつけた際に出力される、longjmp関連の警告です。
-Wは複数の機能を持つオプションなので、-W自体を無効化はできない状況です。

115 :デフォルトの名無しさん:2009/10/01(木) 23:21:56
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
にある通り、-Wは-Wextraの別名で、含まれる警告オプションのうち
longjmpが関連しそうなのは-Wclobberedと-Wuninitializedだから、
-Wno-clobbered -Wno-uninitializedをつけてみたらどうか

116 :デフォルトの名無しさん:2009/10/01(木) 23:23:49
-Wno-error=uninitializedとかでも良いかもな

117 :110:2009/10/01(木) 23:34:35
>>115-116
ありがとうございます!
今は試せる環境がないので明日挑戦してみます。

118 :デフォルトの名無しさん:2009/10/12(月) 00:59:23
-fltoが入る前に-combine試してみたけど、
4.4だと引数が多すぎって言われてコンパイル出来ない事があるな
4.5になると引数の最大値が大きくなったりするんだろうか…
というかしてくれないと困る。
-combine -fwhole-program -ftoでビルドしたいんじゃー

119 :デフォルトの名無しさん:2009/10/16(金) 05:13:28
4.4.2

120 :デフォルトの名無しさん:2009/10/16(金) 09:29:17
>>118
> 4.4だと引数が多すぎって言われてコンパイル出来ない事があるな

これってどういうメッセージ?

121 :デフォルトの名無しさん:2009/10/16(金) 11:16:12
あーもうconstructors_destructor_fn_imps.hpで一晩潰しちゃったよ><あほか

122 :デフォルトの名無しさん:2009/10/16(金) 22:28:44
>>120
cc1: error: too many filenames given. Type cc1 --help for usage

123 :デフォルトの名無しさん:2009/10/17(土) 04:15:11
binutils 2.20

124 :デフォルトの名無しさん:2009/10/18(日) 17:31:01
HelloWorldを、gcc・g++を使用してWinXP・Ubuntuでコンパイルしてみた。
----------------------------
#include <stdio.h>

int main(int argc, char** argv) {
printf("HelloWorld!");
return (0);
}
-----------------------------
WinXPは正常に実行できたけど、Ubuntuのgccがうまくいかない。

/tmp/ccaeafnN.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld はステータス 1 で終了しました

バージョンは4.3.3。
上記のようにリンクでエラーがでる。
コンパイラはもともと入ってたやつだから、導入に失敗したわけではなさそうだけど。
オプションも出力先以外は指定してないし。
原因が分かるエスパーな方はいませんか?

125 :デフォルトの名無しさん:2009/10/18(日) 17:40:09
#include <stdio.h>



#include <cstdio>



printf



std::printf

に替えてみたらどうなる?

126 :デフォルトの名無しさん:2009/10/18(日) 17:46:22
>>124
g++標準のライブラリがリンクされてないように見える。
g++ hello.cc ではなく gcc hello.cc でコンパイルしてない?




127 :デフォルトの名無しさん:2009/10/18(日) 18:06:18
この手の「普通にやったらエラーが出るはずが無い」のに
gccを使っていてリンクエラーが出る場合、大抵は>>126だよな。

普通にg++とするか、あるいは-lstdc++とかでもなんとかなるもんだけど
意外にそこでひっかかる人も多いよね。

まあ>>124の原因は知らないけど。

128 :124:2009/10/18(日) 18:44:08
拡張子を.cにしたらいけました。
ありがとう。

それにしてもアホすぎる……。
TDM/Mingwだと「gcc hello.cpp」は通るけど「g++ hello.cpp」がリンクエラー。
\(^o^)/


129 :デフォルトの名無しさん:2009/10/18(日) 19:27:04
-lstdc++
か?

130 :デフォルトの名無しさん:2009/10/18(日) 19:32:55
gccの#defineマクロの記述で
通常の関数のreturnに相当する記述ってどうやって書けばいいのでしょうか?




131 :デフォルトの名無しさん:2009/10/18(日) 19:34:07
それがわからないようならマクロなぞ使うな。あぶなっかしすぎる。

132 :デフォルトの名無しさん:2009/10/18(日) 19:44:13
>>131
まさか知らないのですか?
バカなんですか?

133 :デフォルトの名無しさん:2009/10/18(日) 19:56:48
gccの話題じゃないな

134 :デフォルトの名無しさん:2009/10/18(日) 20:16:45
>130
http://cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/gccextend.html
ここでも読んだらいいよ
もっとも僕は、-pedantic-errorsを付けてコンパイルしているから無縁だけど

135 :デフォルトの名無しさん:2009/10/19(月) 02:34:19
>>128
要するに、GCCでは拡張子で動作が変わるってことか。

136 :デフォルトの名無しさん:2009/10/19(月) 06:36:28
C Compilerでなくて Compiler Collectionだからね。
拡張子を識別して使う言語を選択する。

137 :デフォルトの名無しさん:2009/10/19(月) 08:03:15
拡張子で言語は選んでくれるのにライブラリは選んでくれないという気
の利かなさ。



138 :デフォルトの名無しさん:2009/10/19(月) 08:12:59
extern "C" {
とかあるしね。言語と実行環境を分けているんだと思う。

139 :デフォルトの名無しさん:2009/10/22(木) 22:46:09
だってオブジェクトはどちらも.oで、そこからリンクする時に
必要に成るライブラリがどちらかなんて ld には分からない。

増改築を繰り返した田舎の温泉旅館みたいなc++は捨てて、
ISO C(c99)でええやん。

140 :デフォルトの名無しさん:2009/10/22(木) 22:49:08
c99のほうが田舎の温泉旅館みたいなんだが……

141 :デフォルトの名無しさん:2009/10/23(金) 18:22:28
C99って使ってる現場あるのか。

142 :デフォルトの名無しさん:2009/10/23(金) 21:12:36
全機能ばりばり使ってます、という所は少ないと思うが、
//コメントとか、変数定義の混在とかは割と使ってるんじゃないか?

143 :デフォルトの名無しさん:2009/10/23(金) 21:37:37
変数は最初に必要になった箇所で宣言するようにしたらかなり見易い。
変数はなるべく使い棄てにしたほうがコンパイラもフロー解析しやすいらしいし。

144 :デフォルトの名無しさん:2009/10/23(金) 22:44:44
数値計算のパッケージ書いてるから、
<fenv.h>がないとどうしようもない。

145 :デフォルトの名無しさん:2009/10/24(土) 01:03:11
使い捨てと言うか、スコープを狭くすると、フロー解析もやり易いし
レジスタ割り付けも楽。最適化もやりやすく成る。

146 :デフォルトの名無しさん:2009/10/24(土) 11:44:01
俺の周りではC99という言葉すら通じん…

147 :デフォルトの名無しさん:2009/10/24(土) 11:54:24
>>144
Fortran使えよ

148 :デフォルトの名無しさん:2009/10/25(日) 00:51:59
レジスタは一括宣言のほうが楽なんじゃね?
だってベースポインタ一緒なんだぜ?

149 :デフォルトの名無しさん:2009/10/25(日) 02:41:36
Javaじゃねーんだから汎用レジスタに乗せて使い捨てることもあるだろ

150 :デフォルトの名無しさん:2009/10/25(日) 02:50:57
いかにメモリアクセスを少なくするかが鍵みたいだよ。

151 :デフォルトの名無しさん:2009/10/25(日) 03:03:23
>>149
そういう最適化はどこで宣言しようと同じだろ

152 :デフォルトの名無しさん:2009/10/25(日) 08:52:09
>>148>>149
40年くらい前の最適化の話みたいですね。

153 :デフォルトの名無しさん:2009/10/25(日) 09:41:30
変数を宣言する=メモリ上に領域を確保する
変数に代入する=メモリ上に書き込む

こんな基本も分かってないようじゃ駄目だろ。

でも、キャッシュから追い出される前に破棄できるデータ領域は重要だよな。
1ms以下で終わる関数は終了までキャッシュメモリから追い出されない可能性あると思うし、
使い終わったらすぐ破棄すれば、その分多くグローバル/スタティックデータをキャッシュで保持できるようになる。


ところで、CPUロジック的には破棄したデータ領域の変更内容ってメインメモリに反映されるんだっけ?
キャッシュが破棄されるのって内容が同一のときだけだろ?
じゃあいくら破棄しても中身書き換えた以上はメインメモリに書き込むんじゃね?

メインメモリへの書き込みを減らすには、できるだけ同じデータ領域を使いまわすのがいいんじゃないかな。
ヒープ領域とかなら繰り返し使われるよね。
でもJavaの場合で最小値が2MBだって。
優先的に実行されるアプリじゃない限り使い回しは難しいね。

確実に使いまわせるのはやっぱりスタック領域だよね。
直近の4kByteが必ず1次キャッシュに入る。

スタックに確保するには、引数渡ししたデータと普通に宣言した変数だよね。
少々のデータなら参照渡しするより値渡ししたほうがキャッシュ効率がいい事になる。
わけないか。
使った分だけ古いのがキャッシュから追い出されるんだ。
だから、ループで散らばったデータを使うくらいなら、ループだけを関数宣言してでもデータを一箇所に集めることが重要なのかな。
あ、そこで書き込みしないデータをループの直前でフォーカス作って変数宣言してコピーしたらいいわけだ。
結局おんなじか。
何度もスタックをキャッシュから追い出すくらいなら普通にヒープにまとめて領域取ったほうがいいな。
変更しなければ書き戻されはしないんだし。
結局小さいデータはオート変数ででっかいデータはアロケート・・ごく普通だな。

154 :デフォルトの名無しさん:2009/10/25(日) 09:48:42
コンパイラの最適化舐めんなよ

155 :デフォルトの名無しさん:2009/10/25(日) 09:57:23
gccの最適化は糞過ぎる
ICCを少しは見習えつーんだよ

156 :デフォルトの名無しさん:2009/10/25(日) 10:59:38
>>153
35年くらい前の知識で停まってるね。
register宣言が出てきた頃かな?

157 :デフォルトの名無しさん:2009/10/25(日) 10:59:52
ごめんなさい。。。

158 :デフォルトの名無しさん:2009/10/25(日) 11:53:01
ICCがgccより明かに優れているところなんてループ展開とかベクトル化とかだけだろ
スタックをどういう風に使うかなんて部分では大差ないよ

159 :デフォルトの名無しさん:2009/10/25(日) 12:23:37
記憶だと、gcc 4.4でiccの最適化を越えてる

160 :デフォルトの名無しさん:2009/10/25(日) 12:59:09
それはないから

161 :デフォルトの名無しさん:2009/10/25(日) 13:05:18
GCCをアーキテクチャ決め打ちのICCと比較しようとする時点で
頭の悪さが丸出しw

162 :デフォルトの名無しさん:2009/10/25(日) 14:10:45
http://multimedia.cx/eggs/last-performance-smackdown-for-awhile/
http://multimedia.cx/eggs/wp-content/uploads/2009/05/64-bit-performance-2009-05-04.png

163 :デフォルトの名無しさん:2009/10/25(日) 14:35:52
やるじゃんgcc

164 :デフォルトの名無しさん:2009/10/25(日) 20:50:27
>>162
64Bitだと偉い差だ。そうえいばx264なんかもビルドしてバイナリ配ってる人なんか32Bitは
gcc3.4.6なんだけど64Bitはgcc4.4を使ってる。

ちょっとgcc4.4.2を落として来るわw ffmpeg自己ビルドなのでw

165 :デフォルトの名無しさん:2009/10/25(日) 21:06:59
gcc4.4系統はバグもあるし
ライセンス問題もあるから使わないほうがいいぞ

166 :デフォルトの名無しさん:2009/10/25(日) 21:10:40
まあ! なんて素敵なFUDでしょう!!

167 :デフォルトの名無しさん:2009/10/25(日) 21:15:05
とりあえずbinutilの2.20が10/16に新しいの出てたんでまず更新。

でgcc4.4.2を気合のシステム上書き(現状4.3.4)の--prefix=/usrインスコでコンパイルスタートして
5分くらい経ってやっぱダメだろって思ってCTL+C押して--prefix=/opt/gcc-4.3 --program-suffix=-4.3
にしたヘタレです・・・

今コンパイル中、CPUフェノムなんで--with-tune-32=k8 --with-tune-64=amdfam10こんなのもつけてみました。

168 :デフォルトの名無しさん:2009/10/25(日) 21:16:54
おおお、焦ったww
--prefix=/opt/gcc-4.4 --program-suffix=-4.4ですねw
変なとこからコピペしたから4.3になってた。本当に4.3のままconfigしちゃったかと思って自分でビビったわ

169 :デフォルトの名無しさん:2009/10/25(日) 21:28:09
>>164
グラフの目盛りよく見ろ。そのうえでえらい差って感じたんならいいけどさ。

170 :デフォルトの名無しさん:2009/10/25(日) 21:30:37
>>169
ああああああああああああああああああああああああぁぁぁぁ

171 :デフォルトの名無しさん:2009/10/25(日) 21:52:36
とか言いながら終わった、しかしグラフには騙された・・・
$ /opt/gcc-4.4/bin/gcc-4.4 -v
Using built-in specs.
Target: x86_64-linux-gnu
コンフィグオプション: ../configure --prefix=/opt/gcc-4.4 --program-suffix=-4.4 --enable-shared --with-system-zlib
--without-included-gettext --enable-threads=posix --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug
--enable-objc-gc --enable-mpfr --with-gmp --with-tune-32=k8 --with-tune-64=amdfam10
--with-multilib-list=x86_64-linux-gnu,i386-linux-gnu --build=x86_64-linux-gnu --host=x86_64-linux-gnu
スレッドモデル: posix
gcc version 4.4.2 (GCC)

172 :デフォルトの名無しさん:2009/10/26(月) 20:19:45
こんな目盛りなら騙して欲しいよな
http://i.msdn.microsoft.com/Aa290049.vcia64alignment_fig2(ja-jp).gif

173 :デフォルトの名無しさん:2009/11/14(土) 21:57:31
ゲーツェーツェーにはCPP CXX g++ などなど
C/C++フンパイラだけいろいろあるけど


何がどう違うの。





174 :デフォルトの名無しさん:2009/11/14(土) 23:20:15
CPP CXXはシェルの変数じゃなかろうか

175 :デフォルトの名無しさん:2009/11/14(土) 23:28:55
cpp はプリプロセッサだろ。 常識的に考えて。
C++ のコンパイラやコンパイラドライバではない。

システムによってはコマンドに + の文字が使えないことがあるので、
便宜上用意されているのが cxx 。
たぶん、中身は一緒だと思う。

176 :デフォルトの名無しさん:2009/11/15(日) 00:23:33
cc、cxx、c++辺りは、GCCでないシステム標準のコンパイラのことがある。
LinuxなどGCCを標準のコンパイラとして採用していると、GCCへのシンボリックリンクになっているけど。

177 :デフォルトの名無しさん:2009/11/15(日) 03:47:24
>>159
よぉ、AMD使い!


178 :デフォルトの名無しさん:2009/11/16(月) 00:13:00
AMDでgccに負けるほどiccってダメなのか

179 :デフォルトの名無しさん:2009/11/16(月) 01:14:48
商用コードは品質が悪いから仕方ない

180 :デフォルトの名無しさん:2009/11/16(月) 08:35:20
最近のGCCは結構すごいよん
参考 http://www.linux-kongress.org/2009/slides/compiler_survey_felix_von_leitner.pdf

181 :デフォルトの名無しさん:2009/11/16(月) 11:15:09
それ読んでgcc 4.4.3で試したけどその通りに最適化してくれないことがままあって困るw

182 :デフォルトの名無しさん:2009/11/16(月) 19:54:02
パーパプー パーパプー パーパプーパーパプーパーパプー
ピーロピーローリーローリロ
ででーででーででー
パスーン

ピンポロピンポロピンポロピロピロプー



未だに自作のプログラムでダウボーイを作ってやろうと思っているのにできねえ俺は
もうだめだ

183 :デフォルトの名無しさん:2009/11/19(木) 12:27:58
gcc(ver4.3.2) のコンパイルオプションで、
-lXm -lXt -lSM -lICE -lXpm -lXext -lX11 -lm
とか必要なライブラリ全てを記述しなくても
-lXm
だけでOKでした。
何か指定したライブラリ(この場合 /usr/lib/libXm.so.2.0.1) の依存ライブラリを調べてリンクしてくれるようですが、これって昔からそうだったのでしょうか?
10年近く前は、一つでも指定を忘れると駄目だったので、よく知らないライブラリも呪文のように指定していたような記憶があるのですが。

184 :デフォルトの名無しさん:2009/11/19(木) 19:08:48
>>183
ライブラリが収まってるディレクトリに libXm.la ってファイルがないか?
それ読んでみ

185 :デフォルトの名無しさん:2009/11/21(土) 01:34:35
gcc 単体で libtool ライブラリなんか見るの?

186 :デフォルトの名無しさん:2009/12/01(火) 20:54:52
ビルドした時刻をバイナリに埋め込みたいんだけど
なんかいい方法ある?
最後にリンクするときに日時がわかるものを埋め込みたい

187 :デフォルトの名無しさん:2009/12/01(火) 21:22:47
コンパイル日時じゃなくてリンク日時?
前者は__DATE__とか__TIME__とかあるけど

188 :デフォルトの名無しさん:2009/12/01(火) 21:36:38
>>187
Makefile で、リンクの直前にそれかけるしか無いんじゃないかな。


189 :デフォルトの名無しさん:2009/12/01(火) 21:56:37
__DATE__,__TIME__を初期値にしたグローバル変数だけの
オブジェクトをリンクごとに生成して埋め込めば?

190 :189:2009/12/01(火) 21:58:39
ごめん、>187と同じだった。

191 :デフォルトの名無しさん:2009/12/06(日) 13:41:22
質問!
Linux@i386(IA-32)のgccでC言語とアセンブラを組み合わせて使っています。
ebx, esi, ediは通常ならcallee-saveですが、
アセンブラ側の都合でcaller-saveとして扱わなければならない箇所があります。
今はmanを参考に-fcall-used-〜オプションを付け
プログラム全体でcaller-saveとして扱っています。
関数ごとにcallee-save, caller-saveを切り替えて速度を稼ぐことは可能ですか?
可能なら方法を教えてください。

192 :デフォルトの名無しさん:2009/12/06(日) 14:57:42
>>191
特殊な ABI を要求する部分だけ別モジュールにして、
そこだけ CFLAGS 切り替えればいいんじゃない?

昔組み込みでそんな感じにしてたけど。

193 :デフォルトの名無しさん:2009/12/06(日) 15:19:44
ああ、でも callee-save 環境から caller-save 環境を
どう呼び出かってのがあるね。どうやってたかな…。

194 :デフォルトの名無しさん:2009/12/06(日) 15:22:57
ttp://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Function-Attributes.html#Function-Attributes
この中になければないと思う

195 :デフォルトの名無しさん:2009/12/06(日) 15:28:05
ようわからんけど、attributeで指定するとか?

196 :デフォルトの名無しさん:2009/12/06(日) 15:31:40
すまん、ちょっとよく覚えてない。多分 hook を挟んで
どうにかしていたと思う。

ただ 個別に -fcall-used-REG を保守するのも段々面倒
になってきて、最後は「えいや」で setjmp ばりに保存
する hook にしちゃった気がする。

197 :191:2009/12/06(日) 16:52:18
>>192-196
ありがとうございます。
まず__attribute__((returns_twice))を調べてみます。

198 :デフォルトの名無しさん:2010/01/08(金) 15:41:53
教えてください

gccでjavaの練習をやろうと思うのですが、
gcc -vで
--enable-languagesにjavaが含まれていれば大丈夫でしょうか
gcj -vだとcommand not foundになります

199 :デフォルトの名無しさん:2010/01/08(金) 16:54:23
どうしても gcj を使わなければならないという理由がないのなら
Sun の JDK をインストールして勉強しれ。
# command not found に対処できない人が使えるようなものじゃないから…

200 :198:2010/01/08(金) 19:20:48
レストン

もう少しgccを触って駄目だったらJDK逝きます

201 :デフォルトの名無しさん:2010/01/09(土) 09:12:51
とっととJDKに逝け

202 :デフォルトの名無しさん:2010/01/12(火) 07:23:45
naked属性な値を返す関数でreturnがないって警告が出るんだけど
この警告だけ消す方法ないですか?
戻り値はインラインアセンブラ内で書いてる

203 :デフォルトの名無しさん:2010/01/12(火) 10:03:10
戻り値をインラインアセンブラで
int
hoge(void)
{
int ret;
asm ("hoge":"=r"(ret));
return ret;
}
みたいに書いてみたら

204 :デフォルトの名無しさん:2010/01/12(火) 19:10:06
gotoでぶっ飛ぶのかもよ。

205 :デフォルトの名無しさん:2010/01/12(火) 19:16:31
>>203
やっぱそれしかないですか
その方法だと余計なレジスタが増えるのがどうも
ありがとうございました

206 :デフォルトの名無しさん:2010/01/12(火) 19:25:26
余計なレジスタは増えんでしょ
-fomit-frame-pointer付きでコンパイルしてみたら

207 :デフォルトの名無しさん:2010/01/12(火) 20:28:58
register int ret asm(レジスタ);
にしたら指定のレジスタ使ってくれました
gccのバージョンで変わったりしないか不安ですけど

208 :デフォルトの名無しさん:2010/01/12(火) 21:01:15
ほうほう

209 :デフォルトの名無しさん:2010/01/13(水) 07:17:49
戻り値に使われるレジスタ以外を
asmで破壊されるレジスタに指定するという方法もあるのでは

210 :デフォルトの名無しさん:2010/01/13(水) 09:52:26
>>207
その仕様は今まで変わったことないから大丈夫でないかとは思うが。

>>209
clobberしすぎるとcc1が文句言ってくるので程々にしませう。

ということで妙なコードを書くときは、その関数を
__asm__(
"func:\n\t"
  :
"ret");
みたいに書かないとダメだと思う。


211 :デフォルトの名無しさん:2010/01/13(水) 11:25:56
peephole2って凄いね

212 :デフォルトの名無しさん:2010/01/19(火) 22:22:38
Linux x86_64 な環境において、gcc version 4.3.4 (Target: x86_64-pc-linux-gnu) な GCC を使って
下記のような XXX.so の中の関数を dlopen、dlsym を使ってよびだせるようにコンパイル
すればどうすればいいのでしょうか?

XXX.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped


調べて、-m32 -ldl をオプションに指定するようにしてみましたが segmentation fault になってしまいます。
アドバイスいただけないでしょうか?

213 :デフォルトの名無しさん:2010/01/19(火) 22:42:40
基本的に無理

214 :デフォルトの名無しさん:2010/01/20(水) 01:30:21
どうしてもということになれば、nspluginwrapperみたいな物を
作って何とかするしか。



215 :デフォルトの名無しさん:2010/01/20(水) 10:29:14
gcc -m32 hoge.c でいいんじゃないか?

216 :デフォルトの名無しさん:2010/01/22(金) 06:11:12
4.4.3

217 :デフォルトの名無しさん:2010/01/29(金) 12:28:56
GCC開発者らがGoogleの「Go言語」をサポートする方針を発表
http://sourceforge.jp/magazine/10/01/29/0250228

218 :デフォルトの名無しさん:2010/02/02(火) 19:20:20
>>217
ブランチ、既にできてるよ。> gccgo

219 :デフォルトの名無しさん:2010/02/02(火) 19:21:42


220 :デフォルトの名無しさん:2010/02/02(火) 20:11:27
goってgccに入れるほどのもんなの?

221 :デフォルトの名無しさん:2010/02/02(火) 20:12:43
政治的な圧力はあったかもね。

222 :デフォルトの名無しさん:2010/02/02(火) 20:22:23
単にぐぐるがメンテナを出しただけだろ?

223 :デフォルトの名無しさん:2010/02/02(火) 23:11:44
llvmじゃなくてgcc、というのが面白い。
ライセンス的にllvmの方が好まれると思ったんだが

224 :デフォルトの名無しさん:2010/02/02(火) 23:26:35
adaとか使ってる人いるの?
金さえ出せばなんでも入れてもらえるんじゃない?

225 :デフォルトの名無しさん:2010/02/03(水) 00:01:39
Google勤務のgccコミッターが何人もいたはず。


226 :デフォルトの名無しさん:2010/02/03(水) 00:12:26
>>223
llvmはgccのbackendに出来るし。

227 :デフォルトの名無しさん:2010/02/03(水) 00:54:01
>>224
カネじゃダメだろ
人とコードを出さないと

228 :デフォルトの名無しさん:2010/02/03(水) 00:55:22
逆に言えば、人とコードの切れ目が縁の切れ目

229 :デフォルトの名無しさん:2010/02/03(水) 01:10:11
C#とかは、金と人は出せるが、コードが出せないMSだからか。納得。

230 :デフォルトの名無しさん:2010/02/03(水) 01:23:58
MS は自前で開発環境用意して囲い込みしたいからだろ。
と、マジレス

231 :デフォルトの名無しさん:2010/02/04(木) 23:09:07
arm用gcc遅いなんとかしろ

232 :デフォルトの名無しさん:2010/02/05(金) 10:16:35
arm社に文句言え

233 :デフォルトの名無しさん:2010/02/09(火) 10:45:29
ARM社に言ってもしょうがないだろ
IARとか、RVDSはもっと速いのかな?

234 :デフォルトの名無しさん:2010/02/11(木) 15:55:30
なぜgccにはstricmpが無いんだ?アホなのか?

235 :デフォルトの名無しさん:2010/02/11(木) 15:57:47
コンパイラの問題じゃないだろ

236 :デフォルトの名無しさん:2010/02/11(木) 19:55:21
strcasecmpがあるから

237 :デフォルトの名無しさん:2010/02/11(木) 20:15:07
strcmpiじゃなかったっけ
まあ今となっては良い思い出

238 :デフォルトの名無しさん:2010/02/11(木) 21:40:15
>>234,236,237
コンパイラとライブラリは切れば切れる関係。

例えば同じ Windows 上の gcc でも、Cygwin と MinGW で使える関数が
違うでしょ。



239 :デフォルトの名無しさん:2010/02/11(木) 23:17:07
ところでnewlibって何なの?
こういうネーミングはやめてほしいんだが
このセンスはさすがに引く
古くなったらどうすんだよ

240 :デフォルトの名無しさん:2010/02/12(金) 11:09:27
最近は年末にリリースされてるから

241 :デフォルトの名無しさん:2010/02/12(金) 17:00:11
それならclibだと。

242 :デフォルトの名無しさん:2010/02/16(火) 17:56:29
http://clubt.jp/product/92651_3621255.html

243 :デフォルトの名無しさん:2010/02/17(水) 02:55:25
>>234
STRing Ignore Compareってw
センスの悪い命名…

244 :デフォルトの名無しさん:2010/02/17(水) 14:11:16
i は Ignore なのか?
case Insensitive の i だと思った
悪い命名なのは疑いようがないけど

245 :デフォルトの名無しさん:2010/02/17(水) 23:46:25
sprintfおせーぞ
gccだけおせーんじゃ
なんとかしろ

246 :デフォルトの名無しさん:2010/02/17(水) 23:53:27
文句言う前に、自分で早いsprintfを書けばいいのに

247 :デフォルトの名無しさん:2010/02/18(木) 00:29:39
std::sprintfとかsprintfと紛らわしい
関数作るんじゃねーよ

248 :デフォルトの名無しさん:2010/02/18(木) 03:13:31
>>231=>>234=>>245=>>247だとすると、
何のプラットフォームでどんなものを作ってるのか、大体予想つくな

249 :デフォルトの名無しさん:2010/02/18(木) 21:20:29
>>248
こういう発言ってついったの方が楽しいのにね

250 :デフォルトの名無しさん:2010/02/19(金) 07:09:00
笑われてるだけでしょ

251 :デフォルトの名無しさん:2010/02/19(金) 14:34:01
>>250
笑うなよ

252 :デフォルトの名無しさん:2010/02/19(金) 18:55:54
gccスレでぐっちてる時点で...

253 :デフォルトの名無しさん:2010/02/20(土) 16:26:44
>233
ARM固有の最適化部分のメインコミッターのほとんどはARM社からお金もらっている人々だよ
最適化で、いつまでたってもARM純正に勝てないのはARM社がコントロールしてるから

ARMのプラットホーム使わないといけない人のほとんどは、gccの中身なんて弄ってる余裕が無いよ
ARMを使ったPCが普及すれば、変わると思うけど



254 :デフォルトの名無しさん:2010/02/20(土) 22:12:55
昔、玄箱スレでgccはARMよりPPCのが効率よいコード吐くって話があったけど、
状況変わらず?
ARMの命令セットがやや特殊なせいなのかな

255 :デフォルトの名無しさん:2010/02/20(土) 22:21:04
>>254
自社のコンパイラより効率的なバイナリを
生成するコンパイラは、排除するって明言しているから
どうにもならないよ。



256 :デフォルトの名無しさん:2010/02/24(水) 07:57:43
gccの文字列処理おせーんだよ

なんでgcc3.4でSSE4.2に対応してねーんだよバカ

257 :デフォルトの名無しさん:2010/02/24(水) 08:01:10
おそい書き方したお前が悪い

258 :デフォルトの名無しさん:2010/02/24(水) 12:45:50
>>256
gcc4使えばいいじゃん。

259 :デフォルトの名無しさん:2010/02/25(木) 02:57:51
pc1:
2.95.3
3.3.6

pc2:
4.3.4
4.4.3

二つずつ入れてて計4つ

>>256
使い分けりゃいいじゃん。

260 :デフォルトの名無しさん:2010/02/27(土) 14:06:45
gccの文字列処理ってどこを指すの?

261 :デフォルトの名無しさん:2010/02/27(土) 16:41:37
さあ、ビルトイン関数のことかも

262 :デフォルトの名無しさん:2010/03/03(水) 10:12:29
>>260
printfの警告とか。

263 :デフォルトの名無しさん:2010/03/03(水) 13:27:36
ストリーミング命令使ったstr系関数の変態最適化ってやってるんだっけ

264 :デフォルトの名無しさん:2010/03/10(水) 00:17:34
gccは
char buf[256] = {0};って記述しても
0に初期化されることはない

腐ってやがる

265 :デフォルトの名無しさん:2010/03/10(水) 00:31:09
>264
バージョンはいくつですか

266 :デフォルトの名無しさん:2010/03/10(水) 03:05:21
>>264 んなこたーない

267 :デフォルトの名無しさん:2010/03/10(水) 04:30:31
起動時にbssをクリアしてないとか

268 :デフォルトの名無しさん:2010/03/10(水) 18:19:47
>>264
いつの時代のgcc?

269 :デフォルトの名無しさん:2010/03/10(水) 18:20:46
char buf[256] = {0};
で、後ろの255バイトも自動的にゼロクリアされるのは
Cの仕様?それともgccのやさしさ?

270 :デフォルトの名無しさん:2010/03/10(水) 19:20:51
>>269
Cの仕様

271 :デフォルトの名無しさん:2010/03/10(水) 22:41:05
>>269
{1}のケースもどうなるか理解しといた方がいいよ。

> the remainder of the aggregate shall be initialized implicitly
> the same as objects that have static storage duration.


272 :デフォルトの名無しさん:2010/03/14(日) 05:07:16
binutils 2.20.1

273 :デフォルトの名無しさん:2010/03/14(日) 07:47:11
binutils-2.16.1

274 :デフォルトの名無しさん:2010/03/14(日) 13:40:41
mallocだと0フィルされる保証はない?

275 :デフォルトの名無しさん:2010/03/14(日) 13:53:06
普通、確保されるだけじゃないの?
callocなら0フィルされると思うけど

276 :デフォルトの名無しさん:2010/03/14(日) 13:53:09
今時gcc使ってるやつは莫迦

277 :デフォルトの名無しさん:2010/03/14(日) 23:21:50
>276
は、何を使ってるのよ


278 :デフォルトの名無しさん:2010/03/15(月) 00:00:29
http://sourceforge.jp/projects/freshmeat_ack/
かな?

279 :デフォルトの名無しさん:2010/03/15(月) 00:17:30
codesourceryのg++ってdo_global_ctorsとかstartup関連がないみたいなんですけど、
自分で実装するとき、.init_arrのグローバルコンストラクタを呼び出す以外にやることありますかね?

あと、libc(newlib)の初期化とかもやらないといけなさそうですが、方法がわからない。

codesourceryでstl使ったプログラムかけた人いたら教えてください。

280 :デフォルトの名無しさん:2010/03/15(月) 10:56:04
>>274
無い。
セキュリティホールになるってんでゼロ梅してた時期もあったけど。

281 :デフォルトの名無しさん:2010/03/15(月) 11:08:15
セキュリティホールってより、暴走の原因とか

282 :デフォルトの名無しさん:2010/03/15(月) 11:37:41
>>281
それはない。
それはただのバグだ。

283 :デフォルトの名無しさん:2010/03/16(火) 18:31:56
不定値前提で安定したプログラム作れないほうがよっぽど

284 :デフォルトの名無しさん:2010/03/16(火) 18:48:52
0クリアするくらいならdeadbeefで埋めたほうがまし

285 :デフォルトの名無しさん:2010/03/16(火) 19:00:57
新規割り当てメモリを初期化しない場合のセキュリティーホールというのは
上位権限のプロセスが開放したメモリにある情報を読めるかもしれないとい問題

286 :デフォルトの名無しさん:2010/03/16(火) 19:01:25
フフフフフフフフフフフフフフフ

287 :デフォルトの名無しさん:2010/03/16(火) 19:06:26
oppai

288 :デフォルトの名無しさん:2010/03/16(火) 19:09:27
>>285
そりゃライブラリ側の仕事でなくOSの仕事だろう

289 :デフォルトの名無しさん:2010/03/16(火) 19:14:24
malloc(3)の話だから、OSの仕事も含むのは普通。

290 :デフォルトの名無しさん:2010/03/17(水) 00:23:13
char buf[256] = {0};
ってやるとgccだとmemset関数を呼び出す
糞実装になってるw

アホだろw


291 :デフォルトの名無しさん:2010/03/17(水) 00:24:54
そこでmemsetを呼び出さない処理系を教えてくれ

292 :デフォルトの名無しさん:2010/03/17(水) 00:29:33
gcc糞だからなぁ

293 :デフォルトの名無しさん:2010/03/17(水) 01:22:05
>>291
gcc-4.3は呼び出さない

294 :デフォルトの名無しさん:2010/03/17(水) 01:33:32
-minline-all-stringopsって使っていいの?


295 :デフォルトの名無しさん:2010/03/17(水) 01:51:04
>>290
どうしてほしいの?rep stosdにでもしてほしいとか?

296 :デフォルトの名無しさん:2010/03/17(水) 03:38:41
>>289
含まねーよ。物事を区別して考えられないバカっているんだねえ。


297 :デフォルトの名無しさん:2010/03/17(水) 07:31:27
>>284
いい悪いってか、用途によるでしょ。
バイナリはでかくなるよ

298 :デフォルトの名無しさん:2010/03/17(水) 07:33:10
ちょっとタンマ
>>297の答えに自信ない

299 :デフォルトの名無しさん:2010/03/17(水) 14:11:14
1kbも増えんだろ

300 :デフォルトの名無しさん:2010/03/17(水) 15:57:20
>>296
あるライブラリ関数について、
C標準では定義されてないことを、
OSの方で定義していることは良くあること。
たとえばスレッドセーフかどうか。

301 :デフォルトの名無しさん:2010/03/18(木) 09:48:55
それはそのライブラリ関数を使う側にとっての関心事項。
>>285のは他プロセスないしカーネルにとっての関心事項。
別の話だね。

302 :デフォルトの名無しさん:2010/03/18(木) 10:28:13
他プロセスがmallocおよびその下請システムコールを呼ぶ場合の話でしょ?

303 :デフォルトの名無しさん:2010/03/19(金) 07:04:48
>>300
OSじゃなく処理系だろ

304 :デフォルトの名無しさん:2010/03/20(土) 09:55:19
CPU Frequencyをリアルタイムで取得するgoodな方法を教えてくれ

305 :デフォルトの名無しさん:2010/03/20(土) 10:10:30
RDTSC

306 :デフォルトの名無しさん:2010/03/23(火) 22:46:45
プリプロセッサの処理中にメッセージを表示したいのですが、
gccでも可能でしょうか?
Visual C++ では #pragma message("msg") などと書けばできたのですが。

307 :デフォルトの名無しさん:2010/03/24(水) 00:12:02
>>306
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas
によると、
#pragma message "Compiling " __FILE__ "..."
とか出来るっぽいぜ

308 :デフォルトの名無しさん:2010/03/24(水) 17:22:22
>>305
今はだめだろ。CPUいっぱいあるから。

309 :デフォルトの名無しさん:2010/03/24(水) 19:57:17
ついでにいうとCPU, OSの組み合わせによってはRDTSCがエミュになってしまい
数百クロックを要する。
だがそのような環境では逆に全コアでタイマカウンタが一貫してたりする。

310 :306:2010/03/25(木) 21:44:47
>>307
ありがとうございます。しかし試してみたところダメでした。
-Wunknown-pragmasでコンパイルしたら「無視しました」みたいなメッセージが出ました。
gccのバージョンによるんですかね。4.3.2でした。


311 :デフォルトの名無しさん:2010/03/27(土) 00:23:57
>>307
#warningで出来るかなと思ったら引数のマクロ展開はしないとか
ふざけた事を抜かしているのであまり使えないな。 この程度は
出来るけど。

#warning Message

$ gcc -c source.c
source.c:1:2: warning: #warning Message

waring:#warning が冗長で醜いなあw



312 :デフォルトの名無しさん:2010/03/27(土) 09:37:53
俺もそれは浮かんだが、-Werrorを入れてる環境だと止まるので完全ではないわな

313 :デフォルトの名無しさん:2010/04/01(木) 23:33:33
Xeon 5500って、最適化オプションの名前って何ですか?

nocona?
core2?


314 :デフォルトの名無しさん:2010/04/02(金) 07:35:10
>>313
たしか〜

nehalem-exかNorthwood

315 :デフォルトの名無しさん:2010/04/02(金) 10:42:05
最適化してもあまり変わらないんだけどな
SSE2を使うだけで十分だと思う

316 :デフォルトの名無しさん:2010/04/02(金) 21:31:49
nativeでいいよ

317 :デフォルトの名無しさん:2010/04/07(水) 10:20:40
4.5.0-RC-20100406

318 :デフォルトの名無しさん:2010/04/14(水) 15:49:00
GCC4.4.1は-msse・最大最適化でコンパイルすると、float演算はSSE命令により
自動ベクトル化されるが、整数演算はベクトル化されない。整数移動はベクトル化
されるが、float用SSE命令が使われていた。GCCはMMXや3DNOWコードを吐かないの?

319 :デフォルトの名無しさん:2010/04/14(水) 21:08:15
GCC 4.5.0 release

320 :デフォルトの名無しさん:2010/04/14(水) 21:43:24
MMXは基本的にshort以下の整数に使うもんだし
飽和演算とか利用してこそだし
あまり自動最適化には向かないんじゃない

321 :デフォルトの名無しさん:2010/04/15(木) 01:44:02
MMXは切替えなくちゃ使えないから使わないみたいなのを読んだような気がする

322 :デフォルトの名無しさん:2010/04/15(木) 07:15:21
SSEの整数命令使えばいいんじゃない

323 :デフォルトの名無しさん:2010/04/15(木) 12:53:50
整数はベクタ化の恩恵を受けにくいからじゃないかな。
単なるコピーならfloat32でも同じことだし。

324 :デフォルトの名無しさん:2010/04/15(木) 22:23:12
-mmmxとか-m3dnowじゃないと使わないんじゃない
SSEで全部まかなえるわけだし

325 :デフォルトの名無しさん:2010/04/15(木) 23:35:38
>>324
普通のSSEには整数命令入っていないよ
-mmmxや-m3dnowでもMMXレジスタは使っていなかった。

326 :デフォルトの名無しさん:2010/04/15(木) 23:52:09
alignmentしてないと速くなんないからじゃね?

327 :デフォルトの名無しさん:2010/04/16(金) 00:02:00
普通のSSEじゃないだろ最初のSSEだろ

328 :デフォルトの名無しさん:2010/04/16(金) 20:29:37
Pen4あたりから入り始めたんだっけ?

329 :デフォルトの名無しさん:2010/04/17(土) 19:38:11
何が? 最初のSSEはPenIIIだよ。

330 :デフォルトの名無しさん:2010/04/18(日) 01:19:50
pen3のsseは整数演算できない

331 :デフォルトの名無しさん:2010/04/18(日) 02:33:27
GCC4が登場した頃には整数SIMDができるSSE2の登場から数年経過しており、MMXに
よる整数SIMDの需要が少なかったからか?さらに、GCC4登場初期はスマートフォンや
PDAにiwmmxtが搭載されていたが、そもそも当時はスマートフォンが普及しておらず
MMX系の需要は少なかったからか。で、今ではスマートフォンが普及しgccに
armの128bit自動ベクトル化が搭載されたが、既に時代遅れのiwmmxtは対象外
という事か。

332 :デフォルトの名無しさん:2010/04/18(日) 14:05:30
gccは商用コンパイラにどれくらい負けますか?

333 :デフォルトの名無しさん:2010/04/18(日) 14:06:59
MMXはintに大体適用できないから
一生懸命対応するメリットが少ないんじゃないの

334 :デフォルトの名無しさん:2010/04/19(月) 03:58:34
>>332
あらゆるCPUに同じコアで対応しているから、乗算結果の上位の取り出しや飽和演算で
最適コードを吐かない、MMXのように切り替えが必要な処理は実装されないんじゃね?
>>333
iwmmxtならそもそもfpu搭載していないので切り替え不要だし、加減算やshort乗算には効果あるよ

335 :デフォルトの名無しさん:2010/04/19(月) 17:17:45
gcc4って最初かなりすごかったのに、後からどんどん遅くbuggyになってるよね
プロプライエタリの工作員が本気出し始めたのかな

336 :デフォルトの名無しさん:2010/04/19(月) 17:19:45
4.5からbackendをplugin化出来るようになったからいつでもllvmに逃げられるようになったけどね

337 :デフォルトの名無しさん:2010/04/19(月) 21:03:17
Benchmarks Of GCC 4.5.0 Compiler Performance
http://www.phoronix.com/scan.php?page=article&item=gcc_45_benchmarks

338 :デフォルトの名無しさん:2010/04/21(水) 02:45:57
ポインタ渡しの関数内でSIMDを使いたい場合、仮引数をstruct{long __attribute__((aligned(16)))
a[2][8];}*aのようにして、a->a[i][j]でアクセスしないとアライメントデータとして扱われない。
ソース冒頭で構造体型定義を使っても可。もっと簡単にポインタがアライメントされて
いる事をgccに分からせる方法はないの?
また、func(struct{long __attribute__((aligned(16))) a[2][32];}*__restrict a,
struct{long __attribute__((aligned(16))) a[2][32];}*__restrict b, int *__restrict c){
int i;for (i=0;i<8;i++){a->a[0][*c*4+i]=b->a[0][i];a->a[1][*c*4+i]=b->a[1][i];} }
のように二次元配列を2つ受け取り、ポインタ渡しで指定されたオフセット分ずらして
転送する関数を書くと、versioning for alias requiredとなり非SIMDコードも生成
されるが、[*c*4+i]を[(*c+=0)*4+i]とすると非SIMDコードは生成されない。
>>335
OSSへの破壊工作ってあるの?

339 :デフォルトの名無しさん:2010/04/21(水) 09:15:33
十分簡単だろ。

340 :デフォルトの名無しさん:2010/04/21(水) 10:53:16
>>338
マクロ使えよ

341 :デフォルトの名無しさん:2010/04/21(水) 11:15:06
http://codepad.org/AKWhbBiV
のコードを g++ 4.3.2 で最適化なしコンパイルして実行したら,

--Start 1--
Destructor
Destructor
--End 1--
--Start 2--
Destructor
--End 2--
Destructor

という結果になった.
(Start 2 と End 2 の間にもう1つの"Destructor"があることを期待していた)

G++ だと,返されるオブジェクトが関数のローカル変数の場合は,
戻り値用の一時オブジェクトは作成されない仕様なの?

342 :デフォルトの名無しさん:2010/04/21(水) 11:33:58
>>341
Start 2 〜のように戻り値と同じ型のローカル変数を return した場合、
C++ の規格でコピーの省略が許されている。 (ISO C++ 12.8 p15)

これに対して Start 1 〜のほうで必要になる、既存の変数から関数引数への
コピーは省略できない。

コピーの省略が許されているだけなので、実際にコピーされるかどうかは
コンパイラやコンパイルオプションやコードの複雑さなどで変わる可能性がある。

343 :デフォルトの名無しさん:2010/04/21(水) 11:38:09
>>342
コピーの省略が認められているとは知りませんでした
大変勉強になりました
どうもありがとうございます

344 :デフォルトの名無しさん:2010/04/21(水) 11:44:51
>>341
http://en.wikipedia.org/wiki/Return_value_optimization

345 :デフォルトの名無しさん:2010/04/21(水) 12:09:15
>>341
g++ の場合、それで困るようなら -fno-elide-constructors を使うという手がある。
http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/C_002b_002b-Dialect-Options.html

346 :デフォルトの名無しさん:2010/04/21(水) 15:53:02
>>345
分かりにくいオプション名だなあ。
RVO(Return Value Optimization)を使うべきだよね。

347 :デフォルトの名無しさん:2010/04/21(水) 16:03:12
頭にno-が付いてるおぷそんは嫌やな
じゃあyea-があるのか?と思ったらないし

348 :341:2010/04/21(水) 16:09:23
>>344-345
ご親切にありがとうございます

349 :デフォルトの名無しさん:2010/04/21(水) 21:33:42
Benchmarking LLVM & Clang Against GCC 4.5
http://www.phoronix.com/scan.php?page=article&item=gcc_llvm_clang

350 :デフォルトの名無しさん:2010/04/26(月) 19:48:31
for (i=0;i<128;i++)c[i]=a[127-i]*b[127-i];のように配列に乗算して順番を
反転するコードもSIMD化されない。a[i]やb[i]への書き込みが禁止されているのなら、
for (i=0;i<128;i++)c[i]=a[i]*b[i];for (i=0;i<64;i++){buf=c[i];c[i]=c[127-i];
c[127-i]=buf;}としなければならない。

351 :デフォルトの名無しさん:2010/04/26(月) 20:02:49
どんなコードを吐いてるの?

352 :デフォルトの名無しさん:2010/04/26(月) 20:10:51
>>350
マジ?
swap処理なんて最悪に遅いのだけど。sizeof(* c)が判らないからなんとも言えないけれど、
a*bを別に保存しておいて転送した方が速い希ガス。

353 :デフォルトの名無しさん:2010/04/26(月) 20:30:01
最適化オプションを知らないとか?

354 :デフォルトの名無しさん:2010/04/29(木) 02:14:24
MakefileでCPUの種類を判別してコンパイルオプションを変更したいのですが、
どのようにすればよいのでしょうか?

355 :デフォルトの名無しさん:2010/04/29(木) 02:24:37
CPUの種類からコンパイルオプションを生成するコマンドを作ればいいんじゃない

356 :デフォルトの名無しさん:2010/04/29(木) 05:05:38
kwsk

357 :デフォルトの名無しさん:2010/04/29(木) 05:20:55
configure書けば

358 :デフォルトの名無しさん:2010/04/29(木) 13:00:52
CPUの種類が自分でわからないのに、コンパイラがわかるわけがない

359 :デフォルトの名無しさん:2010/04/29(木) 16:38:25
MakefileでCPUの種類を判別するプログラムを実行すりゃいいだろ
アホか

360 :デフォルトの名無しさん:2010/04/29(木) 16:42:38
どこにあるんだよ

361 :デフォルトの名無しさん:2010/04/29(木) 16:47:11
CPUの種類を判別する
でググれ

362 :デフォルトの名無しさん:2010/04/29(木) 16:56:36
組み込み向けとかも判別してくれるのかよ
x86用で個別にtuneしてもあんまりかわらんだろ

363 :デフォルトの名無しさん:2010/04/29(木) 17:24:23
クレクレ言うな
自分で「やれ」

364 :デフォルトの名無しさん:2010/04/29(木) 17:46:22
探しているものは、たいてい見つかる
必死で探せばな

365 :デフォルトの名無しさん:2010/04/29(木) 17:54:58
すべてを網羅するようなものはないみたいだ。

366 :デフォルトの名無しさん:2010/04/29(木) 18:19:12
>>365
ある程度までならあるってことだ。
判別不能な分はunknownでいいだろ。
細かいところはあとでなんとかしろ。

367 :デフォルトの名無しさん:2010/04/29(木) 20:44:54
最適化してもデバッグ出来そうにないから、オプションつけても無駄のような

368 :デフォルトの名無しさん:2010/04/29(木) 21:35:41
march=nativeで十分だって

369 :デフォルトの名無しさん:2010/04/30(金) 00:09:29
>>366
でも90MHz Pentium で受け入れられるのに 550MHz K6-3 で蹴られるのは悲しい。

370 :デフォルトの名無しさん:2010/04/30(金) 11:32:43
あむどはふりむかない

371 :デフォルトの名無しさん:2010/04/30(金) 11:51:08
あむどは最適化しなくても早いって、言ってなかったけ

372 :デフォルトの名無しさん:2010/05/01(土) 05:50:20
4.4.4

373 :デフォルトの名無しさん:2010/05/01(土) 07:21:14
>>371
Intel みたいに gcc にコミットできないから、
最適化できないのだよ。
Windows 以外では、gcc を1割最適化できれば、
クロックを1割早くするのと同じなのにな。

374 :デフォルトの名無しさん:2010/05/01(土) 11:57:23
つってもなー、CPUの内部アーキテクチャ変わったらまた最適化変えなきゃだろ?

375 :デフォルトの名無しさん:2010/05/01(土) 18:24:01
これまでのAMDのCPUはフル機能命令デコーダただ並べてたりクセの少ないアーキだから
(Intelはフル機能と機能限定の組み合わせで省電力&面積削減の分キャッシュ増量可能に振ってる)
x86一般最適化がしてあればそれ以上は大して高速化しないと思われ

376 :デフォルトの名無しさん:2010/05/01(土) 19:18:08
いくらあむど贔屓に作ってもgccが1割最適化するなら
印р1割早くなる気がする


377 :デフォルトの名無しさん:2010/05/02(日) 12:40:22
>>376
Intelへの最適化は結構進んでるよ。
もちろん icc ほどじゃないが。

378 :デフォルトの名無しさん:2010/05/03(月) 02:52:03
あむどは各板でバカにされててかわいそうでつ
gccぐらい夢みさせてあげてえ

379 :デフォルトの名無しさん:2010/05/03(月) 16:00:40


380 :デフォルトの名無しさん:2010/05/03(月) 18:05:00
>>378
もっさり、じゃないぶんましではないかと。

381 :デフォルトの名無しさん:2010/05/04(火) 18:16:27
MinGW64_x64で手持ちのアプリを片っ端から64ビット化してるんだが
__fastcall の指定で大量のワーニングが出たのでびっくりして調べてみたら
x64は基本レジスタ渡しで __fastcall とかは指定しても意味がないということを初めて知った
レジスタ渡しの方法がVC++と非互換らしいけどいつかどっちかに統一されるんだろうか

382 :デフォルトの名無しさん:2010/05/04(火) 18:55:52
レジスタ16個もあるからかな

383 :デフォルトの名無しさん:2010/05/04(火) 19:07:42
アセンブラでプログラムしてるんですが、普通にasでアセンブルするとサイズが
デカくなるんですが、単純にアセンブルだけしてくれるようなパラメータが
あったら教えてください。スレちだったらスマン。。

384 :デフォルトの名無しさん:2010/05/04(火) 19:34:18
LLVMの方が性能上だしなぁ
gccなんて意味があるのだろうか?

385 :デフォルトの名無しさん:2010/05/04(火) 20:02:40
性能ってどういう所がいいの?

386 :デフォルトの名無しさん:2010/05/04(火) 20:14:09
>>381
非互換ってそれgcc for Linux/x86-64と VC++ for Windows x64それぞれのことを言ってたりしないか?
例えば↓こことか
http://homepage1.nifty.com/herumi/prog/x64.html

387 :デフォルトの名無しさん:2010/05/04(火) 20:32:11
gccのソースみると、ms_abiってのがあるよ

388 :デフォルトの名無しさん:2010/05/04(火) 22:48:06
>>384
ffmpeg
インラインアセンブラに対応できないと思う
gccに依存してるffmpegが糞とも言う

389 :デフォルトの名無しさん:2010/05/08(土) 11:08:45
Intel compilerでffmpegをコンパイルする方法を教えて

390 :デフォルトの名無しさん:2010/05/08(土) 13:10:04
GCC4.5もう使った人いるのかな。

391 :デフォルトの名無しさん:2010/05/09(日) 00:27:44
必要に迫られてsnapshotのころから。

そういえばリリース版に入れ直してなかった。



392 :デフォルトの名無しさん:2010/05/10(月) 20:22:24
GCCを改変して、任意のアセンブラを吐かせたいのですが、
どのようなワードで検索してよいのかわかりません。

具体的には、自作した仮想マシン向けのアセンブリ言語を吐かせたいとおもっております。

アセンブラとアセンブリ言語は適当にでっち上げた物がありますので、
ぜひGCCを利用してCやC++でプログラムを組めるように仕立て上げたいです。

393 :デフォルトの名無しさん:2010/05/10(月) 20:27:51
すれ違いだが、いま流行りの COINS を利用した方がいいんじゃないかな?
あとは時代遅れの Xbyak とか。

394 :デフォルトの名無しさん:2010/05/10(月) 20:37:04
テキストファイル置換ソフトの方があってるんじゃないか

395 :デフォルトの名無しさん:2010/05/10(月) 20:40:48
>>392
調べるなら >>391 やLLVMとか。pccいじるのも楽でいいかもね。

396 :395:2010/05/10(月) 20:42:38
>>391じゃねえ>>393

397 :デフォルトの名無しさん:2010/05/10(月) 20:42:40
COINSは初めて知りました、ずいぶんモダンな作りをしていますね。

特定アセンブラを吐くドライバだけを作成できれば、
目的が達成できそうな感じでしょうか?

斜め読みしかしていないので、もっと深くよんでみます。

Xbyakは動的にx86のバイナリを吐くライブラリでしょうか?

ソースは見てないのでなんともいえませんが、x86バイナリ生成部を
オレオレバイナリに置き換えればよさそうですね。

いろいろありがとうございます。

398 :392:2010/05/10(月) 20:51:17
>>395
pccも改造ベースにはコンパクトで良いとの評判みたいですね。
こっちもソース覗いてみます!

399 :393:2010/05/10(月) 21:11:41
>>393 は釣りで、いまは LLVM 一択でしょう。(スマ

400 :デフォルトの名無しさん:2010/05/11(火) 01:00:09
俺もLLVM一択だと思うが、
gccを改変する話に戻すと、検索ワードは「バックエンド」な

401 :デフォルトの名無しさん:2010/05/11(火) 17:36:51
>>392
http://gcc.gnu.org/onlinedocs/gccint/Back-End.html#Back-End

402 :デフォルトの名無しさん:2010/05/14(金) 18:50:03
gdbの質問もここでおk?

403 :デフォルトの名無しさん:2010/05/14(金) 19:06:29
グデブ

404 :デフォルトの名無しさん:2010/05/15(土) 06:26:37
適切なスレが思いつかないんで、
とりあえず聞くだけ聞いて、それから誘導されるがよい

405 :デフォルトの名無しさん:2010/05/16(日) 20:35:56
apachでGCCが使えないのですが、gccオプションなどで可能になるものでしょうか?
exeファイルのバイナリーに含まれる文字が原因のようなのですが。
http://pc11.2ch.net/test/read.cgi/mysv/1245157265/770

406 :デフォルトの名無しさん:2010/05/16(日) 20:38:59
gccに問題ないから。exeファイルうんぬんも関係ない。

407 :デフォルトの名無しさん:2010/05/16(日) 20:42:18
はい、
apachとのバイナリーレベルでの相性のようです。

408 :デフォルトの名無しさん:2010/05/16(日) 21:14:23
"\r\n"


409 :デフォルトの名無しさん:2010/05/16(日) 21:52:11
>>408
Windowsなら、"\n"と"\r\n"は、同じ"\r\n"を出力します。

410 :デフォルトの名無しさん:2010/05/17(月) 20:19:00
>>409それだとちょっと語弊があるような最終的にはそうなるけどさ
Windowsの場合"\n"だけでCRLF(復帰改行)が出力されるから"\r\n"を明示する意味はない

411 :デフォルトの名無しさん:2010/05/17(月) 20:57:56
>>410
どうも405の問題は、Windows上においても処理系によっては
¥nがLFであってCRLFで無いという問題の様に思える。 

412 :デフォルトの名無しさん:2010/05/18(火) 04:55:08
標準出力をバイナリーモードにすればいいとかじゃないの?

413 :405:2010/05/18(火) 20:11:57
Apache統合スレ 10 (HTTPServer以外も含む)
http://pc11.2ch.net/test/read.cgi/mysv/1245157265/770-786
C言語でstdoutをbinモードにするには?
http://www.tohoho-web.com/lng/200003/00030242.htm

解決しました。

414 :デフォルトの名無しさん:2010/05/18(火) 20:23:13
窓でパイプ処理やろうとすると必ず通る壁だな

415 :409:2010/05/22(土) 22:05:47
>>410
違ってた、GCCの場合だけは "\n" なら、\n しか出力しないようなEXEを作る。
実験はWINのサクラエディタで実行してみた。

416 :デフォルトの名無しさん:2010/05/23(日) 10:11:53
May 22, 2010
The GNU project and the GCC developers are pleased to announce the release of GCC 4.3.5.
This release is a bug-fix release, containing fixes for regressions in GCC 4.3.4 relative to previous releases of GCC.
http://gcc.gnu.org/gcc-4.3/

417 :デフォルトの名無しさん:2010/05/24(月) 18:06:00
なんでGNU公式の統合開発環境ってないのだろうね。

418 :デフォルトの名無しさん:2010/05/24(月) 18:49:24
GUIなんて要らないとおもってるから。

419 :デフォルトの名無しさん:2010/05/24(月) 18:58:16
GNU統合開発環境ってemacsじゃないの?

420 :デフォルトの名無しさん:2010/05/24(月) 19:22:27
>>419勘違いも甚だしいぞ、失礼なやつだ。

421 :デフォルトの名無しさん:2010/05/24(月) 20:27:02
教祖に聞け

422 :デフォルトの名無しさん:2010/05/25(火) 10:41:11
デバッガだけはGUIあった方が断然いい。
異論はまったく認めない。

423 :デフォルトの名無しさん:2010/05/25(火) 12:28:09
>>530
心配性だな、とっても大人数でいじらなければいけない案件なのか?

424 :デフォルトの名無しさん:2010/05/25(火) 18:15:08
ロングパスだな

425 :デフォルトの名無しさん:2010/05/25(火) 20:36:12
>>422
かなり同意。 OllyDBG になれたら GDB なんて使う気にならん。
symdeb に疑問を感じなかった昔の自分が信じられん。

426 :デフォルトの名無しさん:2010/05/26(水) 02:17:03
おまえらデバッガだの統合開発環境だの言うけど、何がそんなに便利なのか俺に見せてみろよ。

そう後輩に言った10分後、おれは「すまんかった、ちょっとこれマジで教えてくれ…。」と言っていた。

427 :デフォルトの名無しさん:2010/05/26(水) 06:57:24
>>418
そんなこと思っていたらGDB/MIなんてないだろ。

428 :デフォルトの名無しさん:2010/05/27(木) 19:14:57
graphite関係のオプションで詳しい説明あるところを教えてください。
キャッシュサイズとかどこで取得するのかなー?

429 :デフォルトの名無しさん:2010/05/28(金) 15:30:28
4.5はやくしてくれねーかなー
ラムダ式つかいたいから開発保留してるんだけど。

430 :デフォルトの名無しさん:2010/05/29(土) 01:30:35
>>429 保留してる間に gcc のリリースに貢献すればよいではないか。

431 :デフォルトの名無しさん:2010/06/01(火) 00:42:37
GCC が C++ を採用するとはビックリした。これも LLVM の影響なのかな(LLVM は C++)?

http://news.ycombinator.com/item?id=1392601

432 :デフォルトの名無しさん:2010/06/01(火) 01:28:58
なんだ?って思っちゃったがGCC自体のコードをC++で書き直そうって話ね。

433 :デフォルトの名無しさん:2010/06/01(火) 07:15:10
>>431
> The goal is a better compiler for users, not a C++ code base for its own sake.
とか言ってるわりに、とりあえずどの機能が欲しくて使うことにしたのか、よくわからんな。

434 :デフォルトの名無しさん:2010/06/01(火) 10:09:50
むこうにも中二病開発者がいるんだろ

435 :デフォルトの名無しさん:2010/06/01(火) 11:36:30
C言語でもオブジェクト指向なプログラミングはできるし、
継承や多態性も実現できるが・・・。

まあコード量がおおくなって手続きがうざくなるからな。


436 :デフォルトの名無しさん:2010/06/01(火) 16:56:31
せっかくgccなんだから、objc とか ada とかで書いてみるとか。

437 :デフォルトの名無しさん:2010/06/01(火) 21:19:39
まじめな話、gcc が c で書かれているから、いろんなプラットホームに移植されたわけで‥‥‥。

438 :デフォルトの名無しさん:2010/06/01(火) 21:52:21
bootstrapのプロセスはどうなるんだろう? 

439 :デフォルトの名無しさん:2010/06/02(水) 07:33:00
>>438
クロスが基本となるだろう。

440 :デフォルトの名無しさん:2010/06/02(水) 13:57:57
>>437
昔はクロス環境作るの大変だったけど、今は普通だし、
開発環境そこらじゅうにあるし、問題にならないんじゃね

441 :デフォルトの名無しさん:2010/06/02(水) 19:31:49
--enable-build-with-cxx

442 :デフォルトの名無しさん:2010/06/02(水) 21:30:05
gcc動くけどg++ダメなんて環境はそんなになさそうだしなあ。

ついでにどうでもいいことだがRMSがこの決定に同意しているのか気にならんでもない。


443 :デフォルトの名無しさん:2010/06/03(木) 09:55:20
おっ、初めての経験。 ちょっと複雑なデーター構造の初期化を実験してたらg++を無限
ループに入れる事に成功したw 以下のコードをg++でコンパイルしてみてくれ。
g++ 4.0.1, g++ 4.1.2で再現された。 gccではすぐに止る。

struct {
 int value;
 union {
  int value2;
  struct {
  int value3;
  int value4;
 } s;
 } u;
} local = { value : 0,
u : s: { value3 : 3, value4: 4 }};

こういう無限エラーループに入る.
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’



444 :デフォルトの名無しさん:2010/06/03(木) 10:19:07
ちなみにこれが正解だった

...
local = { value : 0, u : { s : { value3 : 3, value4 : 4 }}};


445 :デフォルトの名無しさん:2010/06/04(金) 17:27:31
書けるけど読みたくは無い構造してんなぁ

446 :デフォルトの名無しさん:2010/06/04(金) 17:29:15
>>443
∞ループに入る最小の構造を作るためにもうちょっと単純化してみたら面白いかもよ。


447 :デフォルトの名無しさん:2010/06/04(金) 20:57:18
mingwのLTOまだあああああああああああ

448 :デフォルトの名無しさん:2010/06/08(火) 06:25:05
これって知ってた?
http://sourceware.org/gdb/wiki/STLSupport

試したらこんな事が出来て涙が出た。
(gdb) list
7 map<char*, int> test;
8
9 test["hoge"] = 111;
10 test["mage"] = 222;
11 test["moge"] = 333;
12 }
(gdb) p test
$1 = std::map with 3 elements = {
 [0x8049760 "hoge"] = 111,
 [0x8049765 "mage"] = 222,
 [0x804976a "moge"] = 333
}



449 :デフォルトの名無しさん:2010/06/08(火) 06:33:01
これを/rオプション(raw)で見るといつもの様に

$2 = {_M_t = {
_M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<char* const, int> > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<ch¥
ar* const, int> > >> = {<No data fields>}, <No data fields>},
_M_key_compare = {<std::binary_function<char*, char*, bool>> = {<No data fields>}, <No data fields>}, _M_header = {
_M_color = std::_S_red, _M_parent = 0x804b028, _M_left = 0x804b008, _M_right = 0x804b048}, _M_node_count = 3}}}




450 :デフォルトの名無しさん:2010/06/29(火) 22:13:29
FreeBSDの人いる?
gcc 4.5.0で-O2で最適化したら例外をキャッチできないケース見つけた。-O1だとOK。
再現できるか試して欲しい。

再現パターンはこんな感じ。
分岐の中にthrowがあって、最適化の結果throwにあたるコードが関数のエピローグコードの
後ろに移動してしまった場合にたまに発生。

bool flag = true;
void f()
{ if(flag) throw 1; }
int main()
{
try{ f(); }catch(...){ cout << "ok" << endl; }
}

451 :デフォルトの名無しさん:2010/06/30(水) 08:36:05
4.5.0 ということは ports ? 野良ビルド?

452 :デフォルトの名無しさん:2010/06/30(水) 10:26:36
うん

453 :デフォルトの名無しさん:2010/06/30(水) 10:40:31
結局どっちなんだよと思ったのは私だけじゃないはず

454 :デフォルトの名無しさん:2010/06/30(水) 11:36:41
結局どっちなんだよ!

455 :デフォルトの名無しさん:2010/06/30(水) 16:40:24
>>451
http://ftp.riken.go.jp/の.tbzと野良の両方で再現した。

ただ、OSXからのFreeBSDクロスコンパイル→転送して実行、ではAdaのほうでも再現したのに、
FreeBSD上のセルフコンパイルでは野良ではAdaでは再現しない(C++では再現、gcjはビルドできなかった……)と
結構ばらつく。よくわからん。

456 :デフォルトの名無しさん:2010/07/02(金) 17:51:11
うーむ

457 :デフォルトの名無しさん:2010/07/21(水) 08:25:11
gccデベロッパーライトで、プログラミングを勉強・作成しています。
cとc++は少々経験あります。

ロボットを動かすために、マイコンボードのレジスタに書き込むのですが、
サンプルにDDRx |= (1 << PC0)という部分があり、こちらはDDRx(8bit)の0000 0000に書き込むということだと思います。
0000 0001みたいな感じに

次のPORTx &= ~(1 << PC0)が良く分からないのですが、
こちらは初回は動作させないために0にして動かないようにしておくだと思うのですが、その場合
PORTx &= (0 << PC0)ではないのでしょうか?
~をつけてNOTにしてしまうと ↑の例だと1111 1110になってしまうと思います。
どうしてここはNOTになっているのでしょうか?

それとも初期値のレジスタは1111 1111(FullBit)と決まっているのでしょうか?

ちなみにPC0にはサーボモーターが接続されています。

458 :デフォルトの名無しさん:2010/07/21(水) 08:52:48
0 << PC0 ってなんなんでしょうか?
0 はシフトしても 0 でしょう?
おかしいと思いませんか?

459 :デフォルトの名無しさん:2010/07/21(水) 09:21:16
>>458確かに0をシフトしても0ですね。
んー…となると動きとしてはどうなってるんでしょう?

0000 0001に対して 左シフトで 0000 0010にして、それをPORTx 0000 0000だとした場合
1111 1101にするってことですよね
ん…違うのか、 PC0の場所が最初、 PC1が次だと仮定して
0000 0001を左シフト 0000 0010 PC1が0000 0010左シフトで 0000 0100
で、現在のPORTx が0000 0110になっているからこれをNOTしてあげれば
1111 1001で、使用するPC0とPC1は停止状態になりますよってことか

でもその場合残りの部分がビット立っている状態になってますが、問題ないのですか?
使わないのであれば全てビットをlowにしておかないと何かもやっとするのですが

460 :デフォルトの名無しさん:2010/07/21(水) 09:27:03
書いてきて混乱してきた
PORTxっていうのは、常時フルビット0xFFになっていて
例えばPORTAであれば、対応するのはPA0〜7になり
0xFFの0ビット=PA0, 1=PA1 ... 7=PA7って割り当てられている…?

シフトする理由が分からない…シフトする場合↑の通りであるのならば
PA7はオーバーフローして、消えてなくなってしまうし、循環シフトになっているのなら
シフトしてけばしていくほどおかしくなるような…

461 :デフォルトの名無しさん:2010/07/21(水) 09:34:17
&= ってなんの記号? わかってる?

それから、他人とのコミュニケーションにフルビットとか妙な用語は使わないように。
運転免許マニアの間では全ビットが立ってる、という意味で使われるようだけど。

462 :デフォルトの名無しさん:2010/07/21(水) 09:47:44
>>461
フルビットって使わないの?すまん、知らなかった

&=ってANDって意味じゃないの?
cで言えば、 a = a & b;といった形だと思ってたんだけど
PORTx = PORTx & ~(1 << PCx);
今回チルダが付いているから、NOTANDだと思うけど

463 : ◆fWZlQqSNJk :2010/07/21(水) 09:52:14
トリップ付けておきます
基本情報とか、c勉強した時に例えば2の補数とか説明する・されるときに
フルビットって使ってたんで一般的だと思ってました。

464 :デフォルトの名無しさん:2010/07/21(水) 10:01:53
>PORTx = PORTx & ~(1 << PCx);
ここまで解ってて何故わからないのかがわからない
そのまま「PORTx の PCx ビット目を0にする(PCxビット目以外はそのまま)」って読めるだろ

465 : ◆fWZlQqSNJk :2010/07/21(水) 10:17:32
>>464
うーん…
何となくこのやり取りをしている間に、考えてたら分かってきたような
気もするのだけれども、

NOTANDがかかるのはPORTx全体ではなくて、 & ~(1 << PCx)と書かれているPCxの場所
だけをNOTANDするってことで大丈夫? PORTxに対して行っているからPORTx全体にNOTANDがかかってると思ってた。

後は、シフトする部分がいまいち…
これは、0001を0010にするとかではなくて、ビットをずらすのではなく
0000を0001にしますよ、的な感じでいいです?(1を立てる

466 : ◆fWZlQqSNJk :2010/07/21(水) 10:19:31
軽く自分なりにまとめると、
&~がかかる部分は、PCxの場所だけで
シフトするというのは倍々にしていくシフトと違い
1であれば、その場所に1ビットを立てるということで問題ないでしょうか?

467 : ◆fWZlQqSNJk :2010/07/21(水) 10:25:17
連投ごめん
ぐむむ、でもそれだとやっぱり(1 << PCx)の1が1を立てるであれば、
へし折るという意味で(0 << PCx)でもいけるような…orz

テンプレっていうか、こういうものだっていう意味で0を作るのならばチルダ(NOT)して
作れってことでしょうか?orz

468 :デフォルトの名無しさん:2010/07/21(水) 10:43:57
gcc全く関係ない

469 : ◆fWZlQqSNJk :2010/07/21(水) 10:47:30
>>
gccでのプログラミングでしたので、ここで質問したのですが、
c / c++の方でしたでしょうか?
それとも、また別な場所です?

470 :デフォルトの名無しさん:2010/07/21(水) 10:48:33
なんていうか…もうノートにビットパターン書きながらひとつづつ考えてください。
8ビットで PORTx : 0x0f, PCx : 3 と仮定するね。
「(1 << PCx)」 ってのは (1 << 3)だから 00000100 になるよね?すると
「~(1 << PCx)」 は 11111011 と 3ビット目だけが0の値になる。
「PORTx & ~(1 << PCx)」 は 00001111 & 11111011 だから 00001011 でこれをPORTxに代入する。
PORTx の値は 00001111 だったものが 00001011 になってる。つまり3ビット目が0になった。
あとはPORTxやPCxの値をいろいろ変えながらノートに書いて考えてくれ…
# これでわからないなら適当な初心者スレでたのむ

471 :デフォルトの名無しさん:2010/07/21(水) 10:48:51
Cとかの質問スレだな

472 :470:2010/07/21(水) 10:51:39
ごめん。書いてあるのは PCx : 2 の場合だった><

473 :デフォルトの名無しさん:2010/07/21(水) 10:52:25
こいつの制御するロボットには絶対に近づきたくないなw

474 : ◆fWZlQqSNJk :2010/07/21(水) 11:17:12
>>470
やっと理解した、ありがとう
シフト演算激しく勘違いしてたわ (1 << PCx)の1は1ビットずらすのではなく
1をPCx分ずらすでしたね。過去ログ見てると恥ずかしい

>>470見て、テストケースで100を2ビットシフトして400作って見てやっと分かった
NANDに関しても、0シフトすればいいんじゃね?って思ってたのが非常に恥ずかしい
0した後に残った結果は0じゃないか…0x0F & 0x00 = 0
もやもや解消されました。頑張る
id出てないから分からないけど答えてくれた人たちthx

>>473
ロボに罪ハナイ…

475 :デフォルトの名無しさん:2010/07/21(水) 11:53:10
>>474
がんがれ。ロボがコサックダンス踊れるようになるくらいまで。

476 :デフォルトの名無しさん:2010/07/21(水) 18:42:36
GCC使ってりゃこのスレってことなら
PS3やWii、Androidの開発もこのスレになるな

477 :デフォルトの名無しさん:2010/07/21(水) 19:00:18
携帯じゃなくても良いからMIDIのシーケンサーつくってみろ。
ずれるかずれないかわかる。

478 :デフォルトの名無しさん:2010/07/30(金) 21:54:57
質問です。
TOPPERSって言うフリーの組込みOSがあるのですけど、そのソースコードの一部に
こんなマクロが定義してあってチンプンカンプンです。
IA-32の命令に"s"とか"d"ってあったっけ?

#define OBJECT(x,y) __asm("d" #x "," #y "@");
#define MEMBER(x,y) __asm("s" #x "::" #y ",(%0),(%1)@" ::\
"i"(sizeof(((struct x *)0)->y)), "i"(&((struct x *)0)->y));
#define VAR(x) __asm("s" #x ",(%0),(0)@" :: "i"(sizeof(x)));
#define EVAR(x,y) __asm("s" #y ",(%0),(0)@" :: "i"(sizeof(x)));
#define SVAR(x) __asm("s" #x ",(%0),(0)@" :: "i"(sizeof(x[0])));
#define DEFS(x) __asm("s" #x ",(%0),(0)@" :: "i"((unsigned long)x));

479 :デフォルトの名無しさん:2010/07/30(金) 22:17:38
>>478
__asm の内側はアセンブラの世界。
gas の擬似命令を含むことも出来る。
C/C++ では隣接する文字列リテラルは連結される。

480 :デフォルトの名無しさん:2010/07/30(金) 22:18:18
>>478
ttp://www.ne.jp/asahi/hishidama/home/tech/c/preproc.html
この辺りの「文字列化」を参照してください。
gcc の -E オプションもマクロの理解を助けてくれると思う。

481 :デフォルトの名無しさん:2010/07/30(金) 22:28:39
ここで聞くよりTOPPERSのメイリングリストで聞いたほうがいいような気がするんだけど。

482 :デフォルトの名無しさん:2010/07/30(金) 22:41:17
どうだろう。
あくまでも gcc 側の機能についての質問だからこっちでいいような気もする。

483 :478:2010/07/30(金) 23:38:46
>>479
文字の連結は理解しているつもりですが、IA-32の命令や疑似命令のようにも思えない。
と言う訳で手元のMacOSXでTOPPERSをコンパイルしてそのマクロを使うkernel_chk.cを
生成しようと思ったけど、LINUXではないのでやはりできず。
来週、会社へ行くまでkernel_chk.cを生成できそうにありません

>>481
TOPPERSの機能に関する質問ではないのでそれはできません

484 :デフォルトの名無しさん:2010/07/30(金) 23:44:50
TOPPERSってそもそもIA-32をサポートしているのでしょうか。
インテルのCPUで組み込みってあまり聞かない気がします。
私も仕事でTOPPERSを触りましたけど、そのときはルネサスのSHでした。
コンパイルに使用したコンパイラは、もちろんSH用のgccです。

485 :デフォルトの名無しさん:2010/07/30(金) 23:49:01
ていうか、どんなasm命令に展開されるかは
単純にそのマクロ定義部と呼び出している箇所いくつかを拾い出して
それをcppかければ良いだけでは。

486 :デフォルトの名無しさん:2010/07/30(金) 23:49:48
>>483
評価版のVMwareを手元のMacにインスコしてLinuxインスコしろ。

487 :478:2010/07/30(金) 23:50:04
>>484
Linuxのシミュレーション環境に対応しています。
このパッチをあてて
http://www.northern-cross.info/download.html

$ perl ../jsp/configure -C linux
$ make depend
$ make

これで動かせます。

488 :478:2010/07/30(金) 23:51:31
>>485
それやりたいけどLINUXないお

>>486
面倒ぽ・・・

489 :デフォルトの名無しさん:2010/07/30(金) 23:52:38
マクロ名からしてラベル作ってるんじゃね?

490 :デフォルトの名無しさん:2010/07/31(土) 00:02:41
>>488
いやLinuxでなくてもGCCは使える

っていうか、プリプロセッサの出力、というだけなら
機能を持たないC/C++コンパイラは皆無だろ。
cppを別途持っているかは別として

491 :デフォルトの名無しさん:2010/07/31(土) 00:31:27
Linux固有のヘッダファイルが1つでもインクルードされてたらアウトですよ。

492 :478:2010/07/31(土) 00:32:17
>>490
というかTOPPERSで実際にどのようにマクロが使われているのを調べるにはGCCが使えるだけではダメなんです。

cfg,chkというTOPPERS独自のバイナリプログラムがアプリケーションの設定ファイル*.cfgを参照して
kernel_cfg.cとkernel_chk.cを生成するんです。
kernel_chk.cが実際の使用例になるのですが、これを生成するにはLINUXが必要なんです。

手元のMacOSX(FreeBSDベース)だと生成できなくて・・・

493 :478:2010/07/31(土) 00:36:13
というわけで、来週会社に行ってkernel_chk.cを入手するまでこの件は保留させて下さい
みなさんお騒がせしました

494 :デフォルトの名無しさん:2010/07/31(土) 00:39:45
>>492
そういう状況では、さすがにスレ違いですね。
空きマシンにUbuntuなどをインストールして
Linux環境を構築する以外に、抜け道はないと思います。

495 :デフォルトの名無しさん:2010/07/31(土) 01:32:24
JSPならcygwin+gccのクロス環境がある。
Macは知らんけど。

496 :デフォルトの名無しさん:2010/07/31(土) 07:37:26
VMWARE とかで Linux を導入すると楽かも

497 :デフォルトの名無しさん:2010/07/31(土) 09:49:46
TOPPERS固有の、コンフィギュレータまわりかメタデータか何かを生成するためのコードでしょ。
TOPPERSのソースコードの質問をTOPPERSのメーリングリストでしてはいけない理由がわからん。

498 :デフォルトの名無しさん:2010/07/31(土) 10:18:06
質問の意図はasm自体がよく分かっていないってことでは?

499 :デフォルトの名無しさん:2010/07/31(土) 10:21:44
>>498
>>479に書いてあるし、>>483を見る限り理解してるでしょ。

500 :デフォルトの名無しさん:2010/07/31(土) 10:46:48
つーかメーリングリストが嫌ならOS板にスレがあるからそっちで聞け

501 :デフォルトの名無しさん:2010/07/31(土) 15:53:56
GCCで文字コードをunicodeで
やるにはどうしたらできますか?

502 :デフォルトの名無しさん:2010/07/31(土) 16:03:57
「やる」とはどういうことか定義してくれ。

503 :デフォルトの名無しさん:2010/07/31(土) 16:08:57
unicode文字列をwstringにインプットするにはどうやりますか?

504 :デフォルトの名無しさん:2010/07/31(土) 18:00:12
>>503
wstring s = L"あいうえお";
これで何か不満か?

505 :デフォルトの名無しさん:2010/07/31(土) 18:52:41
いいえ、それはなにか設定が無いと出来ないから
教えてください。

506 :デフォルトの名無しさん:2010/07/31(土) 20:24:39
http://pc12.2ch.net/test/read.cgi/tech/1275477613/855-862

507 :デフォルトの名無しさん:2010/08/01(日) 01:29:14
オプションで -finput-charset と -fwide-exec-charset に文字コードを指定すればいいかもね。
gcc をビルドするときに iconv がリンクされていない場合には使えないけど。
あと、ライブラリ側も貧弱なことがある。

508 :デフォルトの名無しさん:2010/08/01(日) 23:30:53
>>505
できないというなら、やってみてどうなったのか言ってみろよ。

509 :デフォルトの名無しさん:2010/08/02(月) 09:10:37
4.5.1

510 :478:2010/08/02(月) 21:14:16
自己解決
>>478のマクロだけど__asmを使っているだけでアセンブラではなかった。
もちろんIA-32のオペコードでもなかった。
ただgccを利用した文字列処理をするために利用しているだけだった。

例えば、kernel_chk.cではこういう風に使われていて

void checker_function(void)
{
DEFS(TMAX_TPRI);
MEMBER(queue,next);
OBJECT(task_6,LOGTASK);
}

これらをコンパイルして.sファイルに変換すると
#APP
sTMAX_TPRI,($16),(0)@
squeue::next,($4),($0)@
dtask_6,LOGTASK@
#NO_APP

となるけど、もちろんこれをアセンブルすると当然エラーになる。
TOPPERSはこれをアセンブルしないで、jsp/utils/gencheckというツールにかけて
jsp.chkという静的APIファイル(カーネルの設定ファイル)の設定チェックファイルを生成する。
最終的にこういうテキストになる。

sTMAX_TPRI,16,0
squeue::next,4,0
dtask_6,LOGTASK

C言語の関数の中でこのマクロを使っているのは、Cとして定義された関数名、変数名、型名などを使えるからC言語にしているだけ。
まさか__asmにこういう使い方があるとは・・・

511 :デフォルトの名無しさん:2010/08/04(水) 15:21:05
#errorの行に到達したら即座に処理を停止するオプションとかってありますか?
何がしたいのかというと,コンパイル時に-Dオプションでパラメタを与えていて
パラメタを書き忘れた場合にずらずらと大量のエラーが表示されるのを防ぎたいのです.

#ifndef 〜
#error 〜〜〜 <-- ここに到達したら即座に停止する
#endif

108 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)