LINUX.ORG.RU

История изменений

Исправление kirk_johnson, (текущая версия) :

Я именно об этом и сказал, что можно изменив встроенный в компилятор метод работы с va* с простейших манипуляций до функций со вспомогательными структурами поменять принцип работы передачи неопределенного количества аргументов. Возможно в результате будет работать всё и быстрее. Ну и что?

Во-первых, ты сказал не это:

Там говорится, что если бы переписать va* и стандарт языка

Во-вторых, ничего переписывать не нужно, потому что эта структура ТАМ И ТАК ИСПОЛЬЗУЕТСЯ (в clang конечно же, в llvm этого просто не было).

А вот и алгоритм:

+  // Decide which area this value should be read from.
+  // TODO: Implement the AMD64 ABI in its entirety. This simple
+  // selection mechanism works only for the basic types.
+  if (ArgVT == MVT::f80) {
+    llvm_unreachable("va_arg for f80 not yet implemented");
+  } else if (ArgVT.isFloatingPoint() && ArgSize <= 16 /*bytes*/) {
+    ArgMode = 2;  // Argument passed in XMM register. Use fp_offset.
+  } else if (ArgVT.isInteger() && ArgSize <= 32 /*bytes*/) {
+    ArgMode = 1;  // Argument passed in GPR64 register(s). Use gp_offset.
+  } else {
+    llvm_unreachable("Unhandled argument type in LowerVAARG");
+  }

Исправление kirk_johnson, :

Я именно об этом и сказал, что можно изменив встроенный в компилятор метод работы с va* с простейших манипуляций до функций со вспомогательными структурами поменять принцип работы передачи неопределенного количества аргументов. Возможно в результате будет работать всё и быстрее. Ну и что?

Во-первых, ты сказал не это:

Там говорится, что если бы переписать va* и стандарт языка

Во-вторых, ничего переписывать не нужно, потому что эта структура ТАМ И ТАК ИСПОЛЬЗУЕТСЯ (в clang конечно же, в llvm этого просто не было).

Исправление kirk_johnson, :

Я именно об этом и сказал, что можно изменив встроенный в компилятор метод работы с va* с простейших манипуляций до функций со вспомогательными структурами поменять принцип работы передачи неопределенного количества аргументов. Возможно в результате будет работать всё и быстрее. Ну и что?

Во-первых, ты сказал не это:

Там говорится, что если бы переписать va* и стандарт языка

Во-вторых, ничего переписывать не нужно, потому что эта структура ТАМ И ТАК ИСПОЛЬЗУЕТСЯ (В clang конечно же, в llvm этого просто не было).

Исходная версия kirk_johnson, :

Я именно об этом и сказал, что можно изменив встроенный в компилятор метод работы с va* с простейших манипуляций до функций со вспомогательными структурами поменять принцип работы передачи неопределенного количества аргументов. Возможно в результате будет работать всё и быстрее. Ну и что?

Во-первых, ты сказал не это:

Там говорится, что если бы переписать va* и стандарт языка

Во-вторых, ничего переписывать не нужно, потому что эта структура ТАМ И ТАК ИСПОЛЬЗУЕТСЯ :D