Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304

Открыть новую тему     Написать ответ в эту тему

V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
         
Обсуждаем новые возможности и баги
 
Просьба писать про Embarcadero RAD Studio XE5, XE6, XE7, XE8, 10.x (Seattle, Berlin,Tokyo)
  По вопросам скачивания - Тема в Варезнике (lite-версии тут)
  Вопросы по неюникодным версиям Delphi — шестая бумага
  Бесплатные Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus
  Коммерческие компоненты и утилиты для Delphi/BCB
  Вопросы по компонентам для Delphi, C++ Builder разных версий
  Новые языковые возможности, начиная с Delphi 2005 по XE4 — здесь, и New!здесь еще
  Англоязычный официальный форум Embarcadero — здесь
  Embarcadero Quality Central, веб интерфейс — здесь, новый Quality Portal тут
  Программирование на Delphi — викиверситет
  Другие ресурсы
   Предыдущие бумаги
 
     Вопросы ..XE4       Вопросы ..XE3    Вопросы ..XE2      
  Вопросы ..2009-XE    Вопросы ..<2009 / ч.5    Вопросы ..<2009 / ч.4      
  Вопросы ..<2009 / ч.3    Вопросы ..Delphi 2 / ч.2    Вопросы ..Delphi  

  Выключение встроенного эксперта Castalia  для XE8 (иногда помогает при вылетах и тормозах)  
  Полезные плагины(эксперты)

Всего записей: 947 | Зарегистр. 06-02-2007 | Отправлено: 15:25 11-09-2013 | Исправлено: virussnu, 01:29 27-10-2018
persicum

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему студия не генерит экзешник по команде Compile, а только по Build? А юниты у меня по миллион строк текста, так что Build не вариант каждый раз...

Всего записей: 456 | Зарегистр. 27-06-2007 | Отправлено: 20:13 06-11-2021
vez



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Почему студия не генерит экзешник по команде Compile, а только по Build?

 
А вроде нет такой команды (Compile), есть Make и он работает.

Всего записей: 519 | Зарегистр. 02-06-2003 | Отправлено: 21:38 06-11-2021
Samotek

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
persicum
10.4.2 - Генерит. Ctrl+F9

Всего записей: 1743 | Зарегистр. 18-05-2005 | Отправлено: 22:34 06-11-2021
persicum

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Samotek
11-ая глючит либо сама по себе, либо изза Win7.
 
Дебаггер тоже глючит, [rbp + r12*8 + 0] паказует как [rbp + 0]

Всего записей: 456 | Зарегистр. 27-06-2007 | Отправлено: 01:08 07-11-2021
persicum

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это просто фантастика! Когда asm-функция локально спрятана в заголовке паскаль-функции, то при вызове первой вторая не заготавливает для нее параметры в регистрах rcx, rdx, r8, r9.

Всего записей: 456 | Зарегистр. 27-06-2007 | Отправлено: 19:05 08-11-2021 | Исправлено: persicum, 22:58 09-11-2021
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
persicum
Вроде заготавливает, вот это работает. И так работает и даже если pasf вложить целиком в баттон клик процедуру. Проект х64.

Код:
 
function pasf(a, b: int64): int64;
  function asmf(a1, b1: int64): int64;
  asm
    mov rax, a1
    add rax, b1
  end;
 
  begin
    result := asmf(a, b);
  end;
 
procedure TForm1.Button1Click(Sender: TObject);
  begin
    Button1.Caption := inttostr(pasf(1, 2));
  end;

 
Меня больше напрягает, что даже при явном указании параметров функции как int64, перед вызовом он заполняет только ecx, edx, если параметр меньше или равен MaxInt и константен, как в данном случае. И что-то зануления старшей части я поблизости не увидел. Если константные параметры больше чем MaxInt, то тогда начинает юзат rcx, rdx. Например если в этом примере написать: Button1.Caption := inttostr(pasf(5_000_000_000, 5_000_000_000));
 
ps Кстати сейчас попробовал эту новую фичу с разделением тысяч нижним подчеркиванием и нашел баг в форматтере. После Ctrl+D первая пятерка отделилась от остального пробелом и конечно все перестало компилиться Ну молодцы чё. Как обычно - бочка мёда, ложка дегтя.

Всего записей: 230 | Зарегистр. 20-03-2008 | Отправлено: 20:20 11-11-2021 | Исправлено: Sulphide, 20:33 11-11-2021
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide
Можете расслабиться, проц автоматом обнуляет старшую часть регистра:

Цитата:
A special case to note is that a mov to write a 32-bit value into a register also zeroes the upper 32 bits of the register by default, i.e does an implicit zero-extend to bitwidth q.  

https://web.stanford.edu/class/cs107/guide/x86-64.html

Всего записей: 1379 | Зарегистр. 14-07-2008 | Отправлено: 20:59 11-11-2021
persicum

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide
Параметры во внутреннюю asm-функцию передаются, но странным образом. Это не rcx, rdx, r8, как обычно, а rdx и r8, а через rcx передается rbp из внешней функции. Кстати, для чего это реально может пригодиться?
 
Понятно, что я сначала прифигел и у меня ничего не работало.

Всего записей: 456 | Зарегистр. 27-06-2007 | Отправлено: 21:27 11-11-2021 | Исправлено: persicum, 21:34 11-11-2021
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zedxxx
Понял, спасибо. Что-то такое себе и представлял. Мануалы как обычно читаю в крайнем случае =)  
Конечно всякие пассажи дельфового компилятора типа:
 
mov [rbp + 40], rax
mov rax, [rbp + 40]
 
не перестают удивлять...)
 
Добавлено:
persicum
в rcx вроде должно передаваться this сишное или self дельфовое, ежели оно имеется. В противном случае rcx для обычного параметра тоже юзается. Лет 15 назад, когда допиливал оригинальный сишный х64 сервер c4 lineage2 в дельфе и тонне асма тоже на это напоролся =)

Всего записей: 230 | Зарегистр. 20-03-2008 | Отправлено: 21:32 11-11-2021 | Исправлено: Sulphide, 21:42 11-11-2021
persicum

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide
Посмотрите ваш код, какие регистры конкретно используются под a1 и b1?

Всего записей: 456 | Зарегистр. 27-06-2007 | Отправлено: 21:42 11-11-2021 | Исправлено: persicum, 21:46 11-11-2021
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
persicum
Конкретно в этом примере при вызове pasf юзаются rcx, rdx, а при вызове asmf rdx, r8
Если функцию pasf прописать как function TForm1.pasf(a, b: int64): int64; тогда при ее вызове задействуется  rdx, r8 и при вызове asmf так же.

Всего записей: 230 | Зарегистр. 20-03-2008 | Отправлено: 21:47 11-11-2021 | Исправлено: Sulphide, 21:54 11-11-2021
persicum

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide

Цитата:
при вызове asmf rdx, r8

Ну это разве по правилам и где про это написано? Пока шишек не набьешь, не узнаешь.

Всего записей: 456 | Зарегистр. 27-06-2007 | Отправлено: 21:50 11-11-2021 | Исправлено: persicum, 21:54 11-11-2021
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
persicum
Короче если функция/процедура принадлежит классу, то rcx юзается для self. Видимо для вложенных функций/процедур так же для чего-то юзается rcx, но не для параметра. Даже если внешняя функция/процедура не принадлежит классу.

Всего записей: 230 | Зарегистр. 20-03-2008 | Отправлено: 22:02 11-11-2021
persicum

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide
А меня убивает mov rax,1. Ужасной длины опкод. Как это лучше всего делать? Сорри за оффтоп.

Всего записей: 456 | Зарегистр. 27-06-2007 | Отправлено: 23:36 11-11-2021
UniSoft



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Это просто фантастика! Когда asm-функция локально спрятана в заголовке паскаль-функции, то при вызове первой вторая не заготавливает для нее параметры в регистрах rcx, rdx, r8, r9.

Ничего фантастического тут нет.
Обычная оптимизация!!!  
Тем более учитывая, что функция статическая (в С\C++ с модификатором static),  
а как она правильно обзывается в паскале ХЗ (анонимная?).  
суть таких функций в том, что они не экспортируются из модуля, а следовательно и недоступны из вне,
а потому оптимизатор вправе построить ее на свое усмотрение.
Та же Visual Studio такое часто проворачивает.
Это вполне нормальное поведение!
 

Цитата:
А меня убивает mov rax,1. Ужасной длины опкод. Как это лучше всего делать?  

обычно так (короче и быстрее)
31 C0    xor eax, eax
FF C0     inc eax
 

Всего записей: 619 | Зарегистр. 22-12-2006 | Отправлено: 10:52 12-11-2021
persicum

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide
 
А как у сабжа обстоит дело с массивами больше 2G под x64? Кажется, что никак, но что я нарыл:
 
GetMem(pointer, integer), вроде бы, нормально выдаёт большие непрерывные куски памяти под много гигов, хотя вторая переменная не описана как NativeInt.
 
Указатель нормально индексируется квадратными скобками, если использовать директиву {$R-}, а без нее компилятор генерирует дегенеративные проверки границ с применением imm32, понятно, ограничивая индекс 32-мя битами и двумя гигами.
 
Теперь нужно сделать указатель на uint64, я завожу тип:
type u64=array [0..MaxInt div SizeOf(uint64)-1] of uint64;
type p64=^u64.
 
Некрасиво получается, я завожу x64-массив и индексирую его x64-переменной, а тут описывается массив на 2 гига.
 
Как это нормально нужно делать?

Всего записей: 456 | Зарегистр. 27-06-2007 | Отправлено: 20:12 02-12-2021 | Исправлено: persicum, 20:18 02-12-2021
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
persicum
У GetMemory NativeInt: https://docwiki.embarcadero.com/Libraries/Sydney/en/System.GetMemory
 
А массив объявите так:

Код:
 
type  
  u64 = array [0..0] of uint64;
  p64 = ^u64.  
 

Всего записей: 1379 | Зарегистр. 14-07-2008 | Отправлено: 22:37 02-12-2021
persicum

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zedxxx
А как отключить bound check у самой среды? У меня есть присваивания вида a[1]:=..., ключ {$R-} не помогает.

Всего записей: 456 | Зарегистр. 27-06-2007 | Отправлено: 22:40 02-12-2021
Steepe_Hare



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто знает, как в среду Delphi 10.4 установить App Home Screens (Delphi) ? Это Firemonkey-темплейты.
Доступны через GetIt, но поскольку среда не совсем лицензионная, то отключен GetIt
 
Добавлено:
И еще App Profile Screens
 
Под # ссылка на developer.team

Всего записей: 1148 | Зарегистр. 27-10-2001 | Отправлено: 03:28 03-12-2021 | Исправлено: Steepe_Hare, 03:36 03-12-2021
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru