On 01/22/2011 10:48 AM, Sergei Trofimovich wrote: > I've attached dirty patch. It has not very nice comments, tabs and spaces yet.
Steve perhaps should weigh in here... > As I understand, TARGET_AUTO_PIC, TARGET_CONSTANT_GP, > TARGET_NO_PIC should somehow fall into different memory models. > I don't get exact difference between them. Yes, auto-pic and constant-gp are slightly different, but ... > i386 distincts code models in a more fine grained manner: > CMODEL_* and CMODEL_*_PIC. Maybe, ia64 should have similar distinction? With SMALL_PIC, // 21-bit call offsets, 21-bit gp offsets MEDIUM, // 21-bit call offsets, 64-bit absolute data MEDIUM_PIC, // 21-bit call offsets, 64-bit gp offsets LARGE, // 64-bit call offsets, 64-bit absolute data LARGE_PIC, // 64-bit call offsets, 64-bit gp offsets (no non-pic small), then -mno-pic can be absorbed as MEDIUM. The auto-pic option is MEDIUM_PIC, but with a special bit of code in the prologue to setup the gp register. > AFAIU R_IA64_PCREL21B won't let us make calls more, than 2^21 bundles away. > (~16 megabytes up and down). > What kind of calls should be emitted in this case? call_gp/call_value_gp? brl.call.sptk.many b0 = foo# which is another X-format insn with a 64-bit offset. r~