Nếu tôi muốn để lộ một hướng dẫn cụ thể máy duy nhất để các lập trình viên, có hai cách tôi có thể làm như vậy:gcc nội tại và nội tuyến lắp ráp: đó là tốt hơn?
- Xác định một BUILTIN mới/nội
- Expose giống như lắp ráp inline asm() [ Vì đây là một hướng dẫn loại số học duy nhất, tôi tin rằng không cần thiết cho asm dễ bay hơi()]
Tôi đã biết rằng trình biên dịch cho phép trình biên dịch kiểm tra kiểu, đăng ký phân bổ và "tối ưu hóa khác" vv Nhưng trình biên dịch sẽ cần phải làm điều này ngay cả trong trường hợp asm(), phải không? Vậy lợi ích hiệu suất của việc sử dụng asm() trong một hướng dẫn đơn giản là gì?
Phương trình thay đổi như thế nào nếu có nhiều lệnh máy liên quan?
Đối số "di động" có lợi cho nội tại là dễ hiểu, nhưng tôi tò mò muốn hiểu lợi thế về hiệu suất, nếu có, so với cái kia.
Đối với một hướng dẫn duy nhất tôi nghi ngờ sẽ có sự khác biệt đáng chú ý. – Gene
Nội trang dựng sẵn. GCC pastes verbatim lắp ráp nội tuyến của bạn vào dòng mã, và về phân tích duy nhất nó làm trên asm nội tuyến là tính khả thi của các ràng buộc đăng ký bạn đặt. Điều này có nghĩa là không có cơ hội để chuyển đổi các hướng dẫn để cái gì khác nếu nó được tối ưu hơn trong một tình huống nhất định, hoặc xóa nó nếu nó có thể được chứng minh rằng lệnh là vô dụng. –
Lắp ráp nội tuyến là khi bạn biết rõ hơn trình biên dịch, và muốn nó thoát ra ngoài để bạn có thể thực hiện chính xác các lệnh bạn muốn, theo đúng thứ tự bạn muốn, chính xác trên thanh ghi mà bạn muốn. Đây thường là một ý tưởng tồi. – Sneftel