Я не думаю, что эта функция беспорядок. Я должен был написать такой беспорядок прежде.
Эта функция является переводом в код таблицы производителя микропроцессора. Это очень низкоуровневый материал, копирующий соответствующие аппаратные регистры для конкретной причины прерывания или ошибки. В этом типе кода вы часто не можете касаться регистров, которые не были заполнены аппаратным обеспечением - это может вызвать ошибки шины. Это предотвращает использование более общего кода (например, копирование всех регистров).
Я видел что-то похожее на дублирование кода. Однако на этом уровне (работа на уровне прерывания) скорость важнее. Я бы не использовал Extract Method в общем коде, если бы не знал, что извлеченный метод будет встроенным.
Кстати, пока вы там (ядро), обязательно запишите историю изменений этого кода. У меня есть подозрение, что вы обнаружите, что здесь не так много изменений, поскольку они связаны с аппаратным обеспечением. Характер изменений во времени такого рода кода будет сильно отличаться от характера изменений, испытываемых большинством кода пользовательского режима.
Это то, что изменится, например, при внедрении нового консолидированного чипа ввода-вывода. В этом случае изменение, скорее всего, будет копировать, вставлять и изменять новую копию, а не модифицировать существующий код в соответствии с измененными регистрами.